dmitry Mon, 16 Aug 2010 08:11:08 +0000 Revision: http://svn.php.net/viewvc?view=revision&revision=302311
Log: Fixed memory leaks (related to bug #52361) Bug: http://bugs.php.net/52361 (Assigned) Throwing an exception in a destructor causes invalid catching Changed paths: U php/php-src/branches/PHP_5_3/Zend/zend_exceptions.c U php/php-src/trunk/Zend/zend_exceptions.c Modified: php/php-src/branches/PHP_5_3/Zend/zend_exceptions.c =================================================================== --- php/php-src/branches/PHP_5_3/Zend/zend_exceptions.c 2010-08-16 06:06:38 UTC (rev 302310) +++ php/php-src/branches/PHP_5_3/Zend/zend_exceptions.c 2010-08-16 08:11:08 UTC (rev 302311) @@ -572,6 +572,7 @@ zend_call_function(&fci, NULL TSRMLS_CC); if (Z_TYPE_P(trace) != IS_STRING) { + zval_ptr_dtor(&trace); trace = NULL; } @@ -592,6 +593,10 @@ zval_dtor(&line); exception = zend_read_property(default_exception_ce, exception, "previous", sizeof("previous")-1, 0 TSRMLS_CC); + + if (trace) { + zval_ptr_dtor(&trace); + } } zval_dtor(&fname); @@ -599,10 +604,6 @@ * the result in uncaught exception handlers without memleaks. */ zend_update_property_string(default_exception_ce, getThis(), "string", sizeof("string")-1, str TSRMLS_CC); - if (trace) { - zval_ptr_dtor(&trace); - } - RETURN_STRINGL(str, len, 0); } /* }}} */ Modified: php/php-src/trunk/Zend/zend_exceptions.c =================================================================== --- php/php-src/trunk/Zend/zend_exceptions.c 2010-08-16 06:06:38 UTC (rev 302310) +++ php/php-src/trunk/Zend/zend_exceptions.c 2010-08-16 08:11:08 UTC (rev 302311) @@ -81,7 +81,7 @@ } /* }}} */ -void zend_throw_exception_internal(zval *exception TSRMLS_DC) /* {{{ */ +ZEND_API void zend_throw_exception_internal(zval *exception TSRMLS_DC) /* {{{ */ { #ifdef HAVE_DTRACE if (DTRACE_EXCEPTION_THROWN_ENABLED()) { @@ -580,6 +580,7 @@ zend_call_function(&fci, NULL TSRMLS_CC); if (Z_TYPE_P(trace) != IS_STRING) { + zval_ptr_dtor(&trace); trace = NULL; } @@ -600,6 +601,11 @@ zval_dtor(&line); exception = zend_read_property(default_exception_ce, exception, "previous", sizeof("previous")-1, 0 TSRMLS_CC); + + if (trace) { + zval_ptr_dtor(&trace); + } + } zval_dtor(&fname); @@ -607,10 +613,6 @@ * the result in uncaught exception handlers without memleaks. */ zend_update_property_string(default_exception_ce, getThis(), "string", sizeof("string")-1, str TSRMLS_CC); - if (trace) { - zval_ptr_dtor(&trace); - } - RETURN_STRINGL(str, len, 0); } /* }}} */
-- PHP CVS Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php