]> granicus.if.org Git - php/commitdiff
fix possible pointer truncation on win64
authorAnatol Belski <ab@php.net>
Tue, 1 Mar 2016 09:51:55 +0000 (10:51 +0100)
committerAnatol Belski <ab@php.net>
Tue, 1 Mar 2016 09:51:55 +0000 (10:51 +0100)
ext/imap/php_imap.c

index 3d60e9473dc6f1e91c8d89e9a6dbf53f6ce5fc2e..766ea347d2a409595ad405e2e54b6b7f7112f454 100644 (file)
@@ -4259,7 +4259,7 @@ PHP_FUNCTION(imap_mime_header_decode)
        zval myobject;
        zend_string *str;
        char *string, *charset, encoding, *text, *decode;
-       long charset_token, encoding_token, end_token, end, offset=0, i;
+       zend_long charset_token, encoding_token, end_token, end, offset=0, i;
        unsigned long newlength;
 
        if (zend_parse_parameters(ZEND_NUM_ARGS(), "S", &str) == FAILURE) {
@@ -4274,8 +4274,8 @@ PHP_FUNCTION(imap_mime_header_decode)
        charset = (char *) safe_emalloc((end + 1), 2, 0);
        text = &charset[end + 1];
        while (offset < end) {  /* Reached end of the string? */
-               if ((charset_token = (long)php_memnstr(&string[offset], "=?", 2, string + end))) {      /* Is there anything encoded in the string? */
-                       charset_token -= (long)string;
+               if ((charset_token = (zend_long)php_memnstr(&string[offset], "=?", 2, string + end))) { /* Is there anything encoded in the string? */
+                       charset_token -= (zend_long)string;
                        if (offset != charset_token) {  /* Is there anything before the encoded data? */
                                /* Retrieve unencoded data that is found before encoded data */
                                memcpy(text, &string[offset], charset_token-offset);
@@ -4285,10 +4285,10 @@ PHP_FUNCTION(imap_mime_header_decode)
                                add_property_string(&myobject, "text", text);
                                zend_hash_next_index_insert(Z_ARRVAL_P(return_value), &myobject);
                        }
-                       if ((encoding_token = (long)php_memnstr(&string[charset_token+2], "?", 1, string+end))) {               /* Find token for encoding */
-                               encoding_token -= (long)string;
-                               if ((end_token = (long)php_memnstr(&string[encoding_token+3], "?=", 2, string+end))) {  /* Find token for end of encoded data */
-                                       end_token -= (long)string;
+                       if ((encoding_token = (zend_long)php_memnstr(&string[charset_token+2], "?", 1, string+end))) {          /* Find token for encoding */
+                               encoding_token -= (zend_long)string;
+                               if ((end_token = (zend_long)php_memnstr(&string[encoding_token+3], "?=", 2, string+end))) {     /* Find token for end of encoded data */
+                                       end_token -= (zend_long)string;
                                        memcpy(charset, &string[charset_token + 2], encoding_token - (charset_token + 2));      /* Extract charset encoding */
                                        charset[encoding_token-(charset_token + 2)] = 0x00;
                                        encoding=string[encoding_token + 1];    /* Extract encoding from string */
@@ -4797,7 +4797,7 @@ PHP_FUNCTION(imap_timeout)
                                break;
                }
 
-               timeout = (long) mail_parameters(NIL, timeout_type, NIL);
+               timeout = (zend_long) mail_parameters(NIL, timeout_type, NIL);
                RETURN_LONG(timeout);
        } else if (timeout >= 0) {
                switch (ttype) {
@@ -4818,7 +4818,7 @@ PHP_FUNCTION(imap_timeout)
                                break;
                }
 
-               timeout = (long) mail_parameters(NIL, timeout_type, (void *) timeout);
+               timeout = (zend_long) mail_parameters(NIL, timeout_type, (void *) timeout);
                RETURN_TRUE;
        } else {
                RETURN_FALSE;