iliaa                                    Thu, 19 Nov 2009 14:04:34 +0000

Revision: http://svn.php.net/viewvc?view=revision&revision=290995

Log:
Fixed bug #50207 (segmentation fault when concatenating very large strings
on 64bit linux).

Bug: http://bugs.php.net/50207 (Verified) segmentation fault when concatenating 
very large strings on 64bit linux
      
Changed paths:
    U   php/php-src/branches/PHP_5_2/NEWS
    U   php/php-src/branches/PHP_5_2/Zend/zend_operators.c
    U   php/php-src/branches/PHP_5_3/NEWS
    U   php/php-src/branches/PHP_5_3/Zend/zend_operators.c

Modified: php/php-src/branches/PHP_5_2/NEWS
===================================================================
--- php/php-src/branches/PHP_5_2/NEWS   2009-11-19 14:00:05 UTC (rev 290994)
+++ php/php-src/branches/PHP_5_2/NEWS   2009-11-19 14:04:34 UTC (rev 290995)
@@ -6,6 +6,8 @@
 - Changed "post_max_size" php.ini directive to allow unlimited post size by
   setting it to 0. (Rasmus)

+- Fixed bug #50207 (segmentation fault when concatenating very large strings
+  on 64bit linux). (Ilia)
 - Fixed bug #50185 (ldap_get_entries() return false instead of an empty array
   when there is no error). (Jani)
 - Fixed bug #50174 (Incorrectly matched docComment). (Felipe)

Modified: php/php-src/branches/PHP_5_2/Zend/zend_operators.c
===================================================================
--- php/php-src/branches/PHP_5_2/Zend/zend_operators.c  2009-11-19 14:00:05 UTC 
(rev 290994)
+++ php/php-src/branches/PHP_5_2/Zend/zend_operators.c  2009-11-19 14:04:34 UTC 
(rev 290995)
@@ -1202,6 +1202,12 @@
        }
        if (result==op1) {      /* special case, perform operations on result */
                uint res_len = op1->value.str.len + op2->value.str.len;
+
+               if (Z_STRLEN_P(result) < 0) {
+                       efree(Z_STRVAL_P(result));
+                       ZVAL_EMPTY_STRING(result);
+                       zend_error(E_ERROR, "String size overflow");
+               }

                result->value.str.val = erealloc(result->value.str.val, 
res_len+1);


Modified: php/php-src/branches/PHP_5_3/NEWS
===================================================================
--- php/php-src/branches/PHP_5_3/NEWS   2009-11-19 14:00:05 UTC (rev 290994)
+++ php/php-src/branches/PHP_5_3/NEWS   2009-11-19 14:04:34 UTC (rev 290995)
@@ -23,8 +23,11 @@
 - Fixed memory leak in extension loading when an error occurs on Windows.
   (Pierre)

+
 - Fixed bug #50212 (crash by ldap_get_option() with LDAP_OPT_NETWORK_TIMEOUT).
   (Ilia, shigeru_kitazaki at cybozu dot co dot jp)
+- Fixed bug #50207 (segmentation fault when concatenating very large strings on
+  64bit linux). (Ilia)
 - Fixed bug #50185 (ldap_get_entries() return false instead of an empty array
   when there is no error). (Jani)
 - Fixed bug #50140 (With default compilation option, php symbols are

Modified: php/php-src/branches/PHP_5_3/Zend/zend_operators.c
===================================================================
--- php/php-src/branches/PHP_5_3/Zend/zend_operators.c  2009-11-19 14:00:05 UTC 
(rev 290994)
+++ php/php-src/branches/PHP_5_3/Zend/zend_operators.c  2009-11-19 14:04:34 UTC 
(rev 290995)
@@ -1227,6 +1227,12 @@
        if (result==op1) {      /* special case, perform operations on result */
                uint res_len = Z_STRLEN_P(op1) + Z_STRLEN_P(op2);

+               if (Z_STRLEN_P(result) < 0) {
+                       efree(Z_STRVAL_P(result));
+                       ZVAL_EMPTY_STRING(result);
+                       zend_error(E_ERROR, "String size overflow");
+               }
+
                Z_STRVAL_P(result) = erealloc(Z_STRVAL_P(result), res_len+1);

                memcpy(Z_STRVAL_P(result)+Z_STRLEN_P(result), Z_STRVAL_P(op2), 
Z_STRLEN_P(op2));

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

Reply via email to