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 22|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
33?? ??? ????, PHP 8.3.0RC5
44
5+ - Core:
6+ . Fixed double-free of non-interned enum case name. (ilutov)
57
6812 Oct 2023, PHP 8.3.0RC4
79
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)
236236 ZSTR_VAL (name ));
237237 goto failure ;
238238 }
239+ Z_TRY_ADDREF_P (case_name );
239240 zend_hash_index_add_new (backed_enum_table , long_key , case_name );
240241 } else {
241242 ZEND_ASSERT (ce -> enum_backing_type == IS_STRING );
@@ -248,6 +249,7 @@ zend_result zend_enum_build_backed_enum_table(zend_class_entry *ce)
248249 ZSTR_VAL (name ));
249250 goto failure ;
250251 }
252+ Z_TRY_ADDREF_P (case_name );
251253 zend_hash_add_new (backed_enum_table , string_key , case_name );
252254 }
253255 } ZEND_HASH_FOREACH_END ();
You can’t perform that action at this time.
0 commit comments