File tree Expand file tree Collapse file tree 2 files changed +35
-0
lines changed Expand file tree Collapse file tree 2 files changed +35
-0
lines changed Original file line number Diff line number Diff line change @@ -229,6 +229,7 @@ ZEND_API void ZEND_FASTCALL zend_observer_fcall_end(
229
229
zend_execute_data * ex = execute_data -> prev_execute_data ;
230
230
while (ex && (!ex -> func || ex -> func -> type == ZEND_INTERNAL_FUNCTION
231
231
|| !ZEND_OBSERVABLE_FN (ex -> func -> common .fn_flags )
232
+ || !& RUN_TIME_CACHE (& ex -> func -> op_array )
232
233
|| !ZEND_OBSERVER_DATA (& ex -> func -> op_array )
233
234
|| ZEND_OBSERVER_DATA (& ex -> func -> op_array ) == ZEND_OBSERVER_NOT_OBSERVED )) {
234
235
ex = ex -> prev_execute_data ;
Original file line number Diff line number Diff line change
1
+ --TEST--
2
+ Bug #81430 (Attribute instantiation leaves dangling execute_data pointer)
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
+ namespace X ; // avoid cuf() being optimized away
11
+
12
+ #[\Attribute]
13
+ class A {
14
+ public function __construct () {}
15
+ }
16
+
17
+ #[A]
18
+ function B () {}
19
+
20
+ $ r = new \ReflectionFunction ("X \\B " );
21
+ var_dump (call_user_func ([$ r ->getAttributes (A::class)[0 ], 'newInstance ' ]));
22
+
23
+ array_map ("str_repeat " , ["\xFF" ], [100000000 ]); // cause a bailout
24
+ --EXPECTF --
25
+ <!-- init '%s ' -->
26
+ <file '%s ' >
27
+ <!-- init X \A::__construct () -->
28
+ <X \A::__construct>
29
+ </X \A::__construct>
30
+ object (X \A)#3 (0) {
31
+ }
32
+
33
+ Fatal error: Allowed memory size of 20971520 bytes exhausted %s in %s on line %d
34
+ </file '%s ' >
You can’t perform that action at this time.
0 commit comments