Browse Source

MFH: fix leak when call to shutdown function fails

PECL_OPENSSL
Antony Dovgal 20 years ago
parent
commit
04da058284
  1. 20
      ext/standard/basic_functions.c
  2. 25
      ext/standard/tests/general_functions/010.phpt

20
ext/standard/basic_functions.c

@ -5224,18 +5224,20 @@ static int user_shutdown_function_call(php_shutdown_function_entry *shutdown_fun
if (!zend_is_callable(shutdown_function_entry->arguments[0], 0, &function_name)) {
php_error(E_WARNING, "(Registered shutdown functions) Unable to call %s() - function does not exist", 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)
efree(function_name);
return 0;
}
efree(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);
}
if (function_name) {
efree(function_name);
}
return 0;
}

25
ext/standard/tests/general_functions/010.phpt

@ -0,0 +1,25 @@
--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
Loading…
Cancel
Save