tony2001 Tue Apr 10 09:36:10 2007 UTC Added files: /php-src/ext/standard/tests/general_functions bug41037.phpt
Modified files: /php-src/ext/standard basic_functions.c Log: fix #41037 (unregister_tick_function() inside the tick function crash PHP) http://cvs.php.net/viewvc.cgi/php-src/ext/standard/basic_functions.c?r1=1.853&r2=1.854&diff_format=u Index: php-src/ext/standard/basic_functions.c diff -u php-src/ext/standard/basic_functions.c:1.853 php-src/ext/standard/basic_functions.c:1.854 --- php-src/ext/standard/basic_functions.c:1.853 Wed Mar 28 10:22:33 2007 +++ php-src/ext/standard/basic_functions.c Tue Apr 10 09:36:10 2007 @@ -17,7 +17,7 @@ +----------------------------------------------------------------------+ */ -/* $Id: basic_functions.c,v 1.853 2007/03/28 10:22:33 tony2001 Exp $ */ +/* $Id: basic_functions.c,v 1.854 2007/04/10 09:36:10 tony2001 Exp $ */ #include "php.h" #include "php_streams.h" @@ -5239,19 +5239,26 @@ { zval *func1 = tick_fe1->arguments[0]; zval *func2 = tick_fe2->arguments[0]; + int ret; TSRMLS_FETCH(); if (Z_TYPE_P(func1) == IS_STRING && Z_TYPE_P(func2) == IS_STRING) { - return (zend_binary_zval_strcmp(func1, func2) == 0); + ret = (zend_binary_zval_strcmp(func1, func2) == 0); } else if (Z_TYPE_P(func1) == IS_UNICODE && Z_TYPE_P(func2) == IS_UNICODE) { - return (zend_u_binary_zval_strcmp(func1, func2) == 0); + ret = (zend_u_binary_zval_strcmp(func1, func2) == 0); } else if (Z_TYPE_P(func1) == IS_ARRAY && Z_TYPE_P(func2) == IS_ARRAY) { zval result; zend_compare_arrays(&result, func1, func2 TSRMLS_CC); - return (Z_LVAL(result) == 0); + ret = (Z_LVAL(result) == 0); } else { + ret = 0; + } + + if (ret && tick_fe1->calling) { + php_error_docref(NULL TSRMLS_CC, E_WARNING, "Unable to delete tick function executed at the moment"); return 0; } + return ret; } void php_call_shutdown_functions(TSRMLS_D) http://cvs.php.net/viewvc.cgi/php-src/ext/standard/tests/general_functions/bug41037.phpt?view=markup&rev=1.1 Index: php-src/ext/standard/tests/general_functions/bug41037.phpt +++ php-src/ext/standard/tests/general_functions/bug41037.phpt --TEST-- Bug #41037 (unregister_tick_function() inside the tick function crash PHP) --FILE-- <?php function a() { echo "hello"; unregister_tick_function('a'); } declare (ticks=1); register_tick_function('a'); echo "Done\n"; ?> --EXPECTF-- hello Warning: unregister_tick_function(): Unable to delete tick function executed at the moment in %s on line %d Done hello Warning: unregister_tick_function(): Unable to delete tick function executed at the moment in %s on line %d hello Warning: unregister_tick_function(): Unable to delete tick function executed at the moment in %s on line %d -- PHP CVS Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php