mirror of
https://github.com/php/php-src.git
synced 2025-01-27 06:03:45 +08:00
Fixed bug #46205 (Closure - Memory leaks when ReflectionException is thrown)
This commit is contained in:
parent
80b335a94e
commit
292016006e
@ -2005,6 +2005,12 @@ ZEND_METHOD(reflection_parameter, __construct)
|
||||
if (Z_TYPE_PP(parameter) == IS_LONG) {
|
||||
position= Z_LVAL_PP(parameter);
|
||||
if (position < 0 || (zend_uint)position >= fptr->common.num_args) {
|
||||
if (fptr->common.fn_flags & ZEND_ACC_CALL_VIA_HANDLER) {
|
||||
if (fptr->type != ZEND_OVERLOADED_FUNCTION) {
|
||||
efree(fptr->common.function_name.v);
|
||||
}
|
||||
efree(fptr);
|
||||
}
|
||||
_DO_THROW("The parameter specified by its offset could not be found");
|
||||
/* returns out of this function */
|
||||
}
|
||||
@ -2023,6 +2029,12 @@ ZEND_METHOD(reflection_parameter, __construct)
|
||||
}
|
||||
}
|
||||
if (position == -1) {
|
||||
if (fptr->common.fn_flags & ZEND_ACC_CALL_VIA_HANDLER) {
|
||||
if (fptr->type != ZEND_OVERLOADED_FUNCTION) {
|
||||
efree(fptr->common.function_name.v);
|
||||
}
|
||||
efree(fptr);
|
||||
}
|
||||
_DO_THROW("The parameter specified by its name could not be found");
|
||||
/* returns out of this function */
|
||||
}
|
||||
|
14
ext/reflection/tests/bug46205.phpt
Normal file
14
ext/reflection/tests/bug46205.phpt
Normal file
@ -0,0 +1,14 @@
|
||||
--TEST--
|
||||
Bug #46205 (Closure - Memory leaks when ReflectionException is thrown)
|
||||
--FILE--
|
||||
<?php
|
||||
$x = new reflectionmethod('reflectionparameter', 'export');
|
||||
$y = function() { };
|
||||
|
||||
try {
|
||||
$x->invokeArgs(new reflectionparameter('trim', 'str'), array($y, 1));
|
||||
} catch (Exception $e) { }
|
||||
?>
|
||||
ok
|
||||
--EXPECT--
|
||||
ok
|
Loading…
Reference in New Issue
Block a user