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)
700700 zend_class_entry * ce = Z_PTR_P (zv );
701701
702702 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+ }
703709 if ((ce -> ce_flags & ZEND_ACC_LINKED )
704710 && (ce -> ce_flags & ZEND_ACC_CONSTANTS_UPDATED )
705711 && (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)
352352 Bucket * p ;
353353
354354 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+
355361 check_property_type_resolution (ce );
356362
357363 ZCG (is_immutable_class ) =
You can’t perform that action at this time.
0 commit comments