File tree Expand file tree Collapse file tree 4 files changed +32
-0
lines changed Expand file tree Collapse file tree 4 files changed +32
-0
lines changed Original file line number Diff line number Diff line change
1
+ <?php
2
+ class A {}
3
+ class_alias (A::class, 'B ' );
Original file line number Diff line number Diff line change
1
+ --TEST--
2
+ Bug #78918: Class alias during preloading causes assertion failure
3
+ --INI--
4
+ opcache.enable=1
5
+ opcache.enable_cli=1
6
+ opcache.optimization_level=-1
7
+ opcache.preload={PWD}/preload_class_alias.inc
8
+ --SKIPIF--
9
+ <?php require_once ('skipif.inc ' ); ?>
10
+ --FILE--
11
+ <?php
12
+ var_dump (class_exists ('A ' ));
13
+ var_dump (class_exists ('B ' ));
14
+ ?>
15
+ --EXPECT--
16
+ bool(true)
17
+ bool(true)
Original file line number Diff line number Diff line change @@ -700,6 +700,12 @@ static void zend_persist_class_entry(zval *zv)
700
700
zend_class_entry * ce = Z_PTR_P (zv );
701
701
702
702
if (ce -> type == ZEND_USER_CLASS ) {
703
+ /* The same zend_class_entry may be reused by class_alias */
704
+ zend_class_entry * new_ce = zend_shared_alloc_get_xlat_entry (ce );
705
+ if (new_ce ) {
706
+ Z_PTR_P (zv ) = new_ce ;
707
+ return ;
708
+ }
703
709
if ((ce -> ce_flags & ZEND_ACC_LINKED )
704
710
&& (ce -> ce_flags & ZEND_ACC_CONSTANTS_UPDATED )
705
711
&& (ce -> ce_flags & ZEND_ACC_PROPERTY_TYPES_RESOLVED )
Original file line number Diff line number Diff line change @@ -352,6 +352,12 @@ static void zend_persist_class_entry_calc(zval *zv)
352
352
Bucket * p ;
353
353
354
354
if (ce -> type == ZEND_USER_CLASS ) {
355
+ /* The same zend_class_entry may be reused by class_alias */
356
+ if (zend_shared_alloc_get_xlat_entry (ce )) {
357
+ return ;
358
+ }
359
+ zend_shared_alloc_register_xlat_entry (ce , ce );
360
+
355
361
check_property_type_resolution (ce );
356
362
357
363
ZCG (is_immutable_class ) =
You can’t perform that action at this time.
0 commit comments