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