From 8e49d7f32f3bf8e20a699bfef5c2b2591a56e8ec Mon Sep 17 00:00:00 2001 From: Bob Weinand Date: Wed, 2 Nov 2022 16:55:13 +0100 Subject: [PATCH] Delay releasing closures until after observer end --- Zend/zend_closures.c | 4 +++- ext/zend_test/tests/observer_closure_03.phpt | 4 +--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/Zend/zend_closures.c b/Zend/zend_closures.c index 2cad01772245e..5bbc90029f921 100644 --- a/Zend/zend_closures.c +++ b/Zend/zend_closures.c @@ -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; } /* }}} */ diff --git a/ext/zend_test/tests/observer_closure_03.phpt b/ext/zend_test/tests/observer_closure_03.phpt index 247dfb361f57d..e36cca4a84191 100644 --- a/ext/zend_test/tests/observer_closure_03.phpt +++ b/ext/zend_test/tests/observer_closure_03.phpt @@ -7,9 +7,7 @@ zend_test.observer.enabled=1 zend_test.observer.observe_all=1 --FILE-- --EXPECTF--