File tree Expand file tree Collapse file tree 4 files changed +27
-0
lines changed Expand file tree Collapse file tree 4 files changed +27
-0
lines changed Original file line number Diff line number Diff line change 2
2
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
3
3
?? ??? ????, PHP 8.3.0RC5
4
4
5
+ - Core:
6
+ . Fixed double-free of non-interned enum case name. (ilutov)
5
7
6
8
12 Oct 2023, PHP 8.3.0RC4
7
9
Original file line number Diff line number Diff line change
1
+ <?php
2
+
3
+ enum Level: int {
4
+ case Debug = 100 ;
5
+ }
6
+
7
+ var_dump (Level::Debug);
Original file line number Diff line number Diff line change
1
+ --TEST--
2
+ GH-12366: Use-after-free of constant name when script doesn't fit in SHM
3
+ --EXTENSIONS--
4
+ opcache
5
+ --INI--
6
+ opcache.enable_cli=1
7
+ opcache.file_update_protection=1
8
+ --FILE--
9
+ <?php
10
+ $ file = __DIR__ . '/gh12366.inc ' ;
11
+ // Update timestamp and use opcache.file_update_protection=1 to prevent included file from being persisted in shm.
12
+ touch ($ file );
13
+ require $ file ;
14
+ ?>
15
+ --EXPECT--
16
+ enum(Level::Debug)
Original file line number Diff line number Diff line change @@ -236,6 +236,7 @@ zend_result zend_enum_build_backed_enum_table(zend_class_entry *ce)
236
236
ZSTR_VAL (name ));
237
237
goto failure ;
238
238
}
239
+ Z_TRY_ADDREF_P (case_name );
239
240
zend_hash_index_add_new (backed_enum_table , long_key , case_name );
240
241
} else {
241
242
ZEND_ASSERT (ce -> enum_backing_type == IS_STRING );
@@ -248,6 +249,7 @@ zend_result zend_enum_build_backed_enum_table(zend_class_entry *ce)
248
249
ZSTR_VAL (name ));
249
250
goto failure ;
250
251
}
252
+ Z_TRY_ADDREF_P (case_name );
251
253
zend_hash_add_new (backed_enum_table , string_key , case_name );
252
254
}
253
255
} ZEND_HASH_FOREACH_END ();
You can’t perform that action at this time.
0 commit comments