File tree Expand file tree Collapse file tree 4 files changed +31
-0
lines changed Expand file tree Collapse file tree 4 files changed +31
-0
lines changed Original file line number Diff line number Diff line change @@ -47,6 +47,7 @@ PHP NEWS
47
47
. Reset global pointers to prevent use-after-free in zend_jit_status().
48
48
(Florian Engelhardt)
49
49
. Fix issue with JIT restart and hooks. (nielsdos)
50
+ . Fix crash with dynamic function defs in hooks during preload. (nielsdos)
50
51
51
52
- OpenSSL:
52
53
. Fixed bug GH-18986 (OpenSSL backend: incorrect RAND_{load,write}_file()
Original file line number Diff line number Diff line change @@ -4132,6 +4132,24 @@ static void preload_link(void)
4132
4132
preload_remove_declares (op_array );
4133
4133
}
4134
4134
} ZEND_HASH_FOREACH_END ();
4135
+
4136
+ if (ce -> num_hooked_props > 0 ) {
4137
+ zend_property_info * info ;
4138
+
4139
+ ZEND_HASH_MAP_FOREACH_PTR (& ce -> properties_info , info ) {
4140
+ if (info -> hooks ) {
4141
+ for (uint32_t i = 0 ; i < ZEND_PROPERTY_HOOK_COUNT ; i ++ ) {
4142
+ if (info -> hooks [i ]) {
4143
+ op_array = & info -> hooks [i ]-> op_array ;
4144
+ ZEND_ASSERT (op_array -> type == ZEND_USER_FUNCTION );
4145
+ if (!(op_array -> fn_flags & ZEND_ACC_TRAIT_CLONE )) {
4146
+ preload_remove_declares (op_array );
4147
+ }
4148
+ }
4149
+ }
4150
+ }
4151
+ } ZEND_HASH_FOREACH_END ();
4152
+ }
4135
4153
} ZEND_HASH_FOREACH_END ();
4136
4154
}
4137
4155
Original file line number Diff line number Diff line change @@ -5,6 +5,15 @@ class Test {
5
5
echo "dynamic \n" ;
6
6
}
7
7
}
8
+
9
+ public int $ hook {
10
+ get {
11
+ function dynamic_in_hook () {
12
+ echo "dynamic in hook \n" ;
13
+ }
14
+ return 1 ;
15
+ }
16
+ }
8
17
}
9
18
10
19
function func () {
@@ -16,3 +25,4 @@ function func() {
16
25
$ test = new Test ;
17
26
$ test ->method ();
18
27
func ();
28
+ $ test ->hook ;
Original file line number Diff line number Diff line change @@ -15,7 +15,9 @@ if (PHP_OS_FAMILY == 'Windows') die('skip Preloading is not supported on Windows
15
15
<?php
16
16
dynamic ();
17
17
dynamic2 ();
18
+ dynamic_in_hook ();
18
19
?>
19
20
--EXPECT--
20
21
dynamic
21
22
dynamic2
23
+ dynamic in hook
You can’t perform that action at this time.
0 commit comments