diff --git a/Zend/zend_observer.c b/Zend/zend_observer.c index 6574fc68d1c..6b39088cbf5 100644 --- a/Zend/zend_observer.c +++ b/Zend/zend_observer.c @@ -238,6 +238,7 @@ ZEND_API void ZEND_FASTCALL zend_observer_fcall_end( zend_execute_data *ex = execute_data->prev_execute_data; while (ex && (!ex->func || ex->func->type == ZEND_INTERNAL_FUNCTION || !ZEND_OBSERVABLE_FN(ex->func->common.fn_flags) + || !&RUN_TIME_CACHE(&ex->func->op_array) || !ZEND_OBSERVER_DATA(&ex->func->op_array) || ZEND_OBSERVER_DATA(&ex->func->op_array) == ZEND_OBSERVER_NOT_OBSERVED)) { ex = ex->prev_execute_data; diff --git a/ext/zend_test/tests/observer_bug81430_1.phpt b/ext/zend_test/tests/observer_bug81430_1.phpt new file mode 100644 index 00000000000..830112b1b53 --- /dev/null +++ b/ext/zend_test/tests/observer_bug81430_1.phpt @@ -0,0 +1,27 @@ +--TEST-- +Bug #81430 (Attribute instantiation frame has no run time cache) +--INI-- +memory_limit=20M +zend_test.observer.enabled=1 +zend_test.observer.observe_all=1 +--FILE-- +getAttributes(A::class)[0], 'newInstance']); +?> +--EXPECTF-- + + + + + +