Delay releasing closures until after observer end

This commit is contained in:
Bob Weinand 2022-11-02 16:55:13 +01:00
parent 4935e10fc8
commit 8e49d7f32f
2 changed files with 4 additions and 4 deletions

View File

@ -695,7 +695,9 @@ static ZEND_NAMED_FUNCTION(zend_closure_internal_handler) /* {{{ */
{
zend_closure *closure = (zend_closure*)ZEND_CLOSURE_OBJECT(EX(func));
closure->orig_internal_handler(INTERNAL_FUNCTION_PARAM_PASSTHRU);
OBJ_RELEASE((zend_object*)closure);
// Assign to EX(this) so that it is released after observer checks etc.
ZEND_ADD_CALL_FLAG(execute_data, ZEND_CALL_RELEASE_THIS);
Z_OBJ(EX(This)) = &closure->std;
}
/* }}} */

View File

@ -7,9 +7,7 @@ zend_test.observer.enabled=1
zend_test.observer.observe_all=1
--FILE--
<?php
$closure = strlen(...);
var_dump($closure('test'));
var_dump(strlen(...)('test'));
echo 'DONE' . PHP_EOL;
?>
--EXPECTF--