Skip to content

Commit 6e5ef72

Browse files
committed
Fixed bug #81430
Check if the runtime cache pointer is NULL before dereferencing it.
1 parent f9518c3 commit 6e5ef72

File tree

2 files changed

+27
-0
lines changed

2 files changed

+27
-0
lines changed

Zend/zend_observer.c

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -229,6 +229,7 @@ ZEND_API void ZEND_FASTCALL zend_observer_fcall_end(
229229
zend_execute_data *ex = execute_data->prev_execute_data;
230230
while (ex && (!ex->func || ex->func->type == ZEND_INTERNAL_FUNCTION
231231
|| !ZEND_OBSERVABLE_FN(ex->func->common.fn_flags)
232+
|| !&RUN_TIME_CACHE(&ex->func->op_array)
232233
|| !ZEND_OBSERVER_DATA(&ex->func->op_array)
233234
|| ZEND_OBSERVER_DATA(&ex->func->op_array) == ZEND_OBSERVER_NOT_OBSERVED)) {
234235
ex = ex->prev_execute_data;
Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
--TEST--
2+
Bug #81430 (Attribute instantiation frame has no run time cache)
3+
--INI--
4+
memory_limit=20M
5+
zend_test.observer.enabled=1
6+
zend_test.observer.observe_all=1
7+
--FILE--
8+
<?php
9+
10+
#[\Attribute]
11+
class A {
12+
public function __construct() {}
13+
}
14+
15+
#[A]
16+
function B() {}
17+
18+
$r = new \ReflectionFunction("B");
19+
call_user_func([$r->getAttributes(A::class)[0], 'newInstance']);
20+
--EXPECTF--
21+
<!-- init '%s' -->
22+
<file '%s'>
23+
<!-- init A::__construct() -->
24+
<A::__construct>
25+
</A::__construct>
26+
</file '%s'>

0 commit comments

Comments
 (0)