File tree Expand file tree Collapse file tree 3 files changed +25
-1
lines changed Expand file tree Collapse file tree 3 files changed +25
-1
lines changed Original file line number Diff line number Diff line change @@ -806,12 +806,16 @@ static zend_property_info *zend_persist_property_info(zend_property_info *prop)
806
806
807
807
static void zend_persist_class_constant (zval * zv )
808
808
{
809
- zend_class_constant * c = zend_shared_alloc_get_xlat_entry (Z_PTR_P (zv ));
809
+ zend_class_constant * orig_c = Z_PTR_P (zv );
810
+ zend_class_constant * c = zend_shared_alloc_get_xlat_entry (orig_c );
810
811
zend_class_entry * ce ;
811
812
812
813
if (c ) {
813
814
Z_PTR_P (zv ) = c ;
814
815
return ;
816
+ } else if ((orig_c -> ce -> ce_flags & ZEND_ACC_IMMUTABLE ) || orig_c -> ce -> type == ZEND_INTERNAL_CLASS ) {
817
+ /* Class constant comes from a different file in shm or internal class, keep existing pointer. */
818
+ return ;
815
819
} else if (!ZCG (current_persistent_script )-> corrupted
816
820
&& zend_accel_in_shm (Z_PTR_P (zv ))) {
817
821
return ;
Original file line number Diff line number Diff line change @@ -386,6 +386,10 @@ static void zend_persist_class_constant_calc(zval *zv)
386
386
zend_class_constant * c = Z_PTR_P (zv );
387
387
388
388
if (!zend_shared_alloc_get_xlat_entry (c )) {
389
+ if ((c -> ce -> ce_flags & ZEND_ACC_IMMUTABLE ) || c -> ce -> type == ZEND_INTERNAL_CLASS ) {
390
+ /* Class constant comes from a different file in shm or internal class, keep existing pointer. */
391
+ return ;
392
+ }
389
393
if (!ZCG (current_persistent_script )-> corrupted
390
394
&& zend_accel_in_shm (Z_PTR_P (zv ))) {
391
395
return ;
Original file line number Diff line number Diff line change
1
+ --TEST--
2
+ GH-14109: User class extending internal class with attributes
3
+ --EXTENSIONS--
4
+ zend_test
5
+ --FILE--
6
+ <?php
7
+ class Test extends ZendAttributeTest {}
8
+ foreach ((new ReflectionClassConstant (Test::class, 'TEST_CONST ' ))->getAttributes () as $ attribute ) {
9
+ var_dump ($ attribute ->newInstance ());
10
+ }
11
+ ?>
12
+ --EXPECTF--
13
+ object(ZendTestRepeatableAttribute)#%d (0) {
14
+ }
15
+ object(ZendTestRepeatableAttribute)#%d (0) {
16
+ }
You can’t perform that action at this time.
0 commit comments