Skip to content

Commit 2e6d34c

Browse files
committed
Merge branch 'PHP-8.2' into PHP-8.3
* PHP-8.2: Fix use-after-free of constant name
2 parents 5553092 + 53dbb76 commit 2e6d34c

File tree

4 files changed

+27
-0
lines changed

4 files changed

+27
-0
lines changed

NEWS

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,8 @@ PHP NEWS
22
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
33
?? ??? ????, PHP 8.3.0RC5
44

5+
- Core:
6+
. Fixed double-free of non-interned enum case name. (ilutov)
57

68
12 Oct 2023, PHP 8.3.0RC4
79

Zend/tests/gh12366.inc

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
<?php
2+
3+
enum Level: int {
4+
case Debug = 100;
5+
}
6+
7+
var_dump(Level::Debug);

Zend/tests/gh12366.phpt

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
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)

Zend/zend_enum.c

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff 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();

0 commit comments

Comments
 (0)