cvs: php-src /ext/standard basic_functions.c /ext/standard/tests/general_functions 010.phpt
| From: | Antony Dovgal | Date: | Fri, 15 Sep 2006 09:11:31 +0000 |
| Subject: | cvs: php-src /ext/standard basic_functions.c /ext/standard/tests/general_functions 010.phpt | ||
| Groups: | php.cvs | ||
| Request: | Send a blank email to php-cvs+get-40519@lists.php.net to get a copy of this message | ||
tony2001 Fri Sep 15 09:11:31 2006 UTC
Added files:
/php-src/ext/standard/tests/general_functions 010.phpt
Modified files:
/php-src/ext/standard basic_functions.c
Log:
fix leak when call to shutdown function fails
http://cvs.php.net/viewvc.cgi/php-src/ext/standard/basic_functions.c?r1=1.801&r2=1.802&diff_format=u
Index: php-src/ext/standard/basic_functions.c
diff -u php-src/ext/standard/basic_functions.c:1.801 php-src/ext/standard/basic_functions.c:1.802
--- php-src/ext/standard/basic_functions.c:1.801 Thu Aug 31 14:41:15 2006
+++ php-src/ext/standard/basic_functions.c Fri Sep 15 09:11:31 2006
@@ -17,7 +17,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: basic_functions.c,v 1.801 2006/08/31 14:41:15 tony2001 Exp $ */
+/* $Id: basic_functions.c,v 1.802 2006/09/15 09:11:31 tony2001 Exp $ */
#include "php.h"
#include "php_streams.h"
@@ -5214,16 +5214,20 @@
if (!zend_is_callable(shutdown_function_entry->arguments[0], 0, &function_name)) {
php_error(E_WARNING, "(Registered shutdown functions) Unable to call %R() - function does
not exist", Z_TYPE(function_name), Z_UNIVAL(function_name));
- } else if (call_user_function(EG(function_table), NULL,
- shutdown_function_entry->arguments[0],
- &retval,
- shutdown_function_entry->arg_count - 1,
- shutdown_function_entry->arguments + 1
- TSRMLS_CC ) == SUCCESS)
+ zval_dtor(&function_name);
+ return 0;
+ }
+ zval_dtor(&function_name);
+
+ if (call_user_function(EG(function_table), NULL,
+ shutdown_function_entry->arguments[0],
+ &retval,
+ shutdown_function_entry->arg_count - 1,
+ shutdown_function_entry->arguments + 1
+ TSRMLS_CC ) == SUCCESS)
{
zval_dtor(&retval);
}
- zval_dtor(&function_name);
return 0;
}
http://cvs.php.net/viewvc.cgi/php-src/ext/standard/tests/general_functions/010.phpt?view=markup&rev=1.1
Index: php-src/ext/standard/tests/general_functions/010.phpt
+++ php-src/ext/standard/tests/general_functions/010.phpt
--TEST--
register_shutdown_function() & __call
--FILE--
<?php
class test {
function _foo() {
throw new Exception('test');
}
function __call($name=null, $args=null) {
return test::_foo();
}
}
var_dump(register_shutdown_function(array("test","__call")));
echo "Done\n";
?>
--EXPECTF--
Strict Standards: Non-static method test::__call() cannot be called statically in %s on line %d
NULL
Done
Strict Standards: Non-static method test::__call() cannot be called statically in Unknown on line 0
Fatal error: Non-static method test::__call() cannot be called statically in Unknown on line 0