zoe             Tue Dec 16 21:11:50 2008 UTC

  Modified files:              (Branch: PHP_5_2)
    /php-src/ext/imap   php_imap.c 
  Log:
  bug #46884 fix
  
http://cvs.php.net/viewvc.cgi/php-src/ext/imap/php_imap.c?r1=1.208.2.7.2.38&r2=1.208.2.7.2.39&diff_format=u
Index: php-src/ext/imap/php_imap.c
diff -u php-src/ext/imap/php_imap.c:1.208.2.7.2.38 
php-src/ext/imap/php_imap.c:1.208.2.7.2.39
--- php-src/ext/imap/php_imap.c:1.208.2.7.2.38  Fri Dec  5 11:59:01 2008
+++ php-src/ext/imap/php_imap.c Tue Dec 16 21:11:49 2008
@@ -26,7 +26,7 @@
    | PHP 4.0 updates:  Zeev Suraski <z...@zend.com>                       |
    +----------------------------------------------------------------------+
  */
-/* $Id: php_imap.c,v 1.208.2.7.2.38 2008/12/05 11:59:01 zoe Exp $ */
+/* $Id: php_imap.c,v 1.208.2.7.2.39 2008/12/16 21:11:49 zoe Exp $ */
 
 #define IMAP41
 
@@ -1208,22 +1208,29 @@
    Read the message body */
 PHP_FUNCTION(imap_body)
 {
-       zval **streamind, **msgno, **flags;
+       zval **streamind, **msgno, **pflags;
        pils *imap_le_struct; 
        int msgindex, myargc=ZEND_NUM_ARGS();
+       long flags=0L;
 
-       if (myargc < 2 || myargc > 3 || zend_get_parameters_ex(myargc, 
&streamind, &msgno, &flags) == FAILURE) {
+       if (myargc < 2 || myargc > 3 || zend_get_parameters_ex(myargc, 
&streamind, &msgno, &pflags) == FAILURE) {
                ZEND_WRONG_PARAM_COUNT();
        }
 
+
        ZEND_FETCH_RESOURCE(imap_le_struct, pils *, streamind, -1, "imap", 
le_imap);
        
        convert_to_long_ex(msgno);
        if (myargc == 3) {
-               convert_to_long_ex(flags);
+               convert_to_long_ex(pflags);
+               flags = Z_LVAL_PP(pflags);
+               if (flags && ((flags & ~(FT_UID|FT_PEEK|FT_INTERNAL)) != 0)) {
+                               php_error_docref(NULL TSRMLS_CC, E_WARNING, 
"invalid value for the options parameter");
+                               RETURN_FALSE;
+                       }
        }
 
-       if ((myargc == 3) && (Z_LVAL_PP(flags) & FT_UID)) {
+       if ((myargc == 3) && (flags & FT_UID)) {
                /* This should be cached; if it causes an extra RTT to the
                   IMAP server, then that's the price we pay for making
                   sure we don't crash. */
@@ -1236,7 +1243,7 @@
                RETURN_FALSE;
        }
 
-       RETVAL_STRING(mail_fetchtext_full (imap_le_struct->imap_stream, 
Z_LVAL_PP(msgno), NIL, myargc==3 ? Z_LVAL_PP(flags) : NIL), 1);
+       RETVAL_STRING(mail_fetchtext_full (imap_le_struct->imap_stream, 
Z_LVAL_PP(msgno), NIL, myargc==3 ? Z_LVAL_PP(pflags) : NIL), 1);
 }
 /* }}} */
 
@@ -1830,14 +1837,16 @@
    Read the full structure of a message */
 PHP_FUNCTION(imap_fetchstructure)
 {
-       zval **streamind, **msgno, **flags;
+       zval **streamind, **msgno, **pflags;
        pils *imap_le_struct;
        BODY *body;
        int msgindex, myargc=ZEND_NUM_ARGS();
+       long flags=0L;
 
-       if (myargc < 2  || myargc > 3 || zend_get_parameters_ex(myargc, 
&streamind, &msgno, &flags) == FAILURE) {
+       if (myargc < 2  || myargc > 3 || zend_get_parameters_ex(myargc, 
&streamind, &msgno, &pflags) == FAILURE) {
                ZEND_WRONG_PARAM_COUNT();
        }
+
        
        ZEND_FETCH_RESOURCE(imap_le_struct, pils *, streamind, -1, "imap", 
le_imap);
 
@@ -1846,12 +1855,18 @@
                RETURN_FALSE;
        }
        if (myargc == 3) {
-               convert_to_long_ex(flags);
+               convert_to_long_ex(pflags);
+               flags = Z_LVAL_PP(pflags);
+
+               if (flags && ((flags & ~FT_UID) != 0)) {
+                               php_error_docref(NULL TSRMLS_CC, E_WARNING, 
"invalid value for the options parameter");
+                               RETURN_FALSE;
+                       }
        }
 
        object_init(return_value);
 
-       if ((myargc == 3) && (Z_LVAL_PP(flags) & FT_UID)) {
+       if ((myargc == 3) && (flags & FT_UID)) {
                /* This should be cached; if it causes an extra RTT to the
                   IMAP server, then that's the price we pay for making
                   sure we don't crash. */
@@ -1861,7 +1876,7 @@
        }
        PHP_IMAP_CHECK_MSGNO(msgindex);
 
-       mail_fetchstructure_full(imap_le_struct->imap_stream, Z_LVAL_PP(msgno), 
&body , myargc == 3 ? Z_LVAL_PP(flags) : NIL);
+       mail_fetchstructure_full(imap_le_struct->imap_stream, Z_LVAL_PP(msgno), 
&body , myargc == 3 ? Z_LVAL_PP(pflags) : NIL);
        
        if (!body) {
                php_error_docref(NULL TSRMLS_CC, E_WARNING, "No body 
information available");
@@ -1876,30 +1891,37 @@
    Get a specific body section */
 PHP_FUNCTION(imap_fetchbody)
 {
-       zval **streamind, **msgno, **sec, **flags;
+       zval **streamind, **msgno, **sec, **pflags;
        pils *imap_le_struct;
        char *body;
+        long flags=0L;
        unsigned long len;
        int myargc=ZEND_NUM_ARGS();
 
-       if (myargc < 3 || myargc > 4 || zend_get_parameters_ex(myargc, 
&streamind, &msgno, &sec, &flags) == FAILURE) {
+       if (myargc < 3 || myargc > 4 || zend_get_parameters_ex(myargc, 
&streamind, &msgno, &sec, &pflags) == FAILURE) {
                ZEND_WRONG_PARAM_COUNT();
        }
 
+
        ZEND_FETCH_RESOURCE(imap_le_struct, pils *, streamind, -1, "imap", 
le_imap);
 
        convert_to_long_ex(msgno);
        convert_to_string_ex(sec);
        if (myargc == 4) {
-               convert_to_long_ex(flags);
+               convert_to_long_ex(pflags);
+               flags = Z_LVAL_PP(pflags);
+               if (flags && ((flags & ~(FT_UID|FT_PEEK|FT_INTERNAL)) != 0)) {
+                               php_error_docref(NULL TSRMLS_CC, E_WARNING, 
"invalid value for the options parameter");
+                       RETURN_FALSE;
+                        }
        }
 
-       if (myargc < 4 || !(Z_LVAL_PP(flags) & FT_UID)) {
+       if (myargc < 4 || !(flags & FT_UID)) {
                /* only perform the check if the msgno is a message number and 
not a UID */
                PHP_IMAP_CHECK_MSGNO(Z_LVAL_PP(msgno));
        }
 
-       body = mail_fetchbody_full(imap_le_struct->imap_stream, 
Z_LVAL_PP(msgno), Z_STRVAL_PP(sec), &len, myargc==4 ? Z_LVAL_PP(flags) : NIL);
+       body = mail_fetchbody_full(imap_le_struct->imap_stream, 
Z_LVAL_PP(msgno), Z_STRVAL_PP(sec), &len, myargc==4 ? Z_LVAL_PP(pflags) : NIL);
 
        if (!body) {
                php_error_docref(NULL TSRMLS_CC, E_WARNING, "No body 
information available");
@@ -2640,22 +2662,29 @@
    Get the full unfiltered header for a message */
 PHP_FUNCTION(imap_fetchheader)
 {
-       zval **streamind, **msgno, **flags;
+       zval **streamind, **msgno, **pflags;
        pils *imap_le_struct;
        int msgindex, myargc = ZEND_NUM_ARGS();
+        long flags=0L;
        
-       if (myargc < 2 || myargc > 3 || zend_get_parameters_ex(myargc, 
&streamind, &msgno, &flags) == FAILURE) {
+       if (myargc < 2 || myargc > 3 || zend_get_parameters_ex(myargc, 
&streamind, &msgno, &pflags) == FAILURE) {
                ZEND_WRONG_PARAM_COUNT();
        }
-       
+
        ZEND_FETCH_RESOURCE(imap_le_struct, pils *, streamind, -1, "imap", 
le_imap);
 
        convert_to_long_ex(msgno);
        if (myargc == 3) {
-               convert_to_long_ex(flags);
-       }
+               convert_to_long_ex(pflags);
+                flags =  Z_LVAL_PP(pflags);
+               if (flags && ((flags & ~(FT_UID|FT_INTERNAL|FT_PREFETCHTEXT)) 
!= 0)) {
+                               php_error_docref(NULL TSRMLS_CC, E_WARNING, 
"invalid value for the options parameter");
+                               RETURN_FALSE;
+               }
+        }
+
        
-       if ((myargc == 3) && (Z_LVAL_PP(flags) & FT_UID)) {
+       if ((myargc == 3) && (flags & FT_UID)) {
                /* This should be cached; if it causes an extra RTT to the
                   IMAP server, then that's the price we pay for making sure
                   we don't crash. */
@@ -2666,7 +2695,7 @@
 
        PHP_IMAP_CHECK_MSGNO(msgindex);
 
-       RETVAL_STRING(mail_fetchheader_full(imap_le_struct->imap_stream, 
Z_LVAL_PP(msgno), NIL, NIL, (myargc == 3 ? Z_LVAL_PP(flags) : NIL)), 1);
+       RETVAL_STRING(mail_fetchheader_full(imap_le_struct->imap_stream, 
Z_LVAL_PP(msgno), NIL, NIL, (myargc == 3 ? Z_LVAL_PP(pflags) : NIL)), 1);
 }
 /* }}} */
 
@@ -2889,6 +2918,7 @@
                ZEND_WRONG_PARAM_COUNT();
        }
 
+
        ZEND_FETCH_RESOURCE(imap_le_struct, pils *, streamind, -1, "imap", 
le_imap);
 
        convert_to_string_ex(sequence);



-- 
PHP CVS Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php

Reply via email to