iliaa Sun Dec 3 17:13:12 2006 UTC Modified files: (Branch: PHP_5_2) /php-src/ext/standard assert.c /php-src NEWS Log: Fixed bug #39718 (possible crash if assert.callback is set in ini). http://cvs.php.net/viewvc.cgi/php-src/ext/standard/assert.c?r1=1.60.2.3.2.2&r2=1.60.2.3.2.3&diff_format=u Index: php-src/ext/standard/assert.c diff -u php-src/ext/standard/assert.c:1.60.2.3.2.2 php-src/ext/standard/assert.c:1.60.2.3.2.3 --- php-src/ext/standard/assert.c:1.60.2.3.2.2 Sat Jul 1 12:21:07 2006 +++ php-src/ext/standard/assert.c Sun Dec 3 17:13:11 2006 @@ -16,7 +16,7 @@ +----------------------------------------------------------------------+ */ -/* $Id: assert.c,v 1.60.2.3.2.2 2006/07/01 12:21:07 nlopess Exp $ */ +/* $Id: assert.c,v 1.60.2.3.2.3 2006/12/03 17:13:11 iliaa Exp $ */ /* {{{ includes/startup/misc */ @@ -30,6 +30,7 @@ long warning; long quiet_eval; zval *callback; + char *cb; ZEND_END_MODULE_GLOBALS(assert) ZEND_DECLARE_MODULE_GLOBALS(assert) @@ -52,15 +53,26 @@ static PHP_INI_MH(OnChangeCallback) { - if (ASSERTG(callback)) { - zval_ptr_dtor(&ASSERTG(callback)); - } - - if (new_value && (ASSERTG(callback) || new_value_length)) { - MAKE_STD_ZVAL(ASSERTG(callback)); - ZVAL_STRINGL(ASSERTG(callback), new_value, new_value_length, 1); + if (EG(in_execution)) { + if (ASSERTG(callback)) { + zval_ptr_dtor(&ASSERTG(callback)); + } + if (new_value && (ASSERTG(callback) || new_value_length)) { + MAKE_STD_ZVAL(ASSERTG(callback)); + ZVAL_STRINGL(ASSERTG(callback), new_value, new_value_length, 1); + } + } else { + if (ASSERTG(cb)) { + pefree(ASSERTG(cb), 1); + } + if (new_value && new_value_length) { + ASSERTG(cb) = pemalloc(new_value_length + 1, 1); + memcpy(ASSERTG(cb), new_value, new_value_length); + ASSERTG(cb)[new_value_length] = '\0'; + } else { + ASSERTG(cb) = NULL; + } } - return SUCCESS; } @@ -75,6 +87,7 @@ static void php_assert_init_globals(zend_assert_globals *assert_globals_p TSRMLS_DC) { assert_globals_p->callback = NULL; + assert_globals_p->cb = NULL; } PHP_MINIT_FUNCTION(assert) @@ -94,9 +107,9 @@ PHP_MSHUTDOWN_FUNCTION(assert) { - if (ASSERTG(callback)) { - zval_ptr_dtor(&ASSERTG(callback)); - ASSERTG(callback) = NULL; + if (ASSERTG(cb)) { + pefree(ASSERTG(cb), 1); + ASSERTG(cb) = NULL; } return SUCCESS; } @@ -174,6 +187,11 @@ RETURN_TRUE; } + if (!ASSERTG(callback) && ASSERTG(cb)) { + MAKE_STD_ZVAL(ASSERTG(callback)); + ZVAL_STRING(ASSERTG(callback), ASSERTG(cb), 1); + } + if (ASSERTG(callback)) { zval *args[3]; zval *retval; http://cvs.php.net/viewvc.cgi/php-src/NEWS?r1=1.2027.2.547.2.392&r2=1.2027.2.547.2.393&diff_format=u Index: php-src/NEWS diff -u php-src/NEWS:1.2027.2.547.2.392 php-src/NEWS:1.2027.2.547.2.393 --- php-src/NEWS:1.2027.2.547.2.392 Sat Dec 2 17:53:44 2006 +++ php-src/NEWS Sun Dec 3 17:13:11 2006 @@ -44,6 +44,7 @@ php_filter.h). - Fixed wrong signature initialization in imagepng (Takeshi Abe) - Added optimization for imageline with horizontal and vertial lines (Pierre) +- Fixed bug #39718 (possible crash if assert.callback is set in ini). (Ilia) - Fixed bug #39702 (php crashes in the allocator on linux-m68k). (Dmitry) - Fixed bug #39673 (file_get_contents causes bus error on certain offsets). (Tony)
-- PHP CVS Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php