@@ -3726,7 +3726,9 @@ static void add_class_vars(zend_class_entry *ce, int statics, zval *return_value
3726
3726
zend_string * key ;
3727
3727
3728
3728
ZEND_HASH_FOREACH_STR_KEY_PTR (& ce -> properties_info , key , prop_info ) {
3729
- if (((prop_info -> flags & ZEND_ACC_PRIVATE ) &&
3729
+ if (((prop_info -> flags & ZEND_ACC_PROTECTED ) &&
3730
+ !zend_check_protected (prop_info -> ce , ce )) ||
3731
+ ((prop_info -> flags & ZEND_ACC_PRIVATE ) &&
3730
3732
prop_info -> ce != ce )) {
3731
3733
continue ;
3732
3734
}
@@ -3764,9 +3766,6 @@ ZEND_METHOD(reflection_class, getStaticProperties)
3764
3766
{
3765
3767
reflection_object * intern ;
3766
3768
zend_class_entry * ce ;
3767
- zend_property_info * prop_info ;
3768
- zval * prop ;
3769
- zend_string * key ;
3770
3769
3771
3770
if (zend_parse_parameters_none () == FAILURE ) {
3772
3771
return ;
@@ -3778,34 +3777,8 @@ ZEND_METHOD(reflection_class, getStaticProperties)
3778
3777
return ;
3779
3778
}
3780
3779
3781
- if (!CE_STATIC_MEMBERS (ce )) {
3782
- zend_class_init_statics (ce );
3783
- }
3784
-
3785
3780
array_init (return_value );
3786
-
3787
- ZEND_HASH_FOREACH_STR_KEY_PTR (& ce -> properties_info , key , prop_info ) {
3788
- if (((prop_info -> flags & ZEND_ACC_PRIVATE ) &&
3789
- prop_info -> ce != ce )) {
3790
- continue ;
3791
- }
3792
- if ((prop_info -> flags & ZEND_ACC_STATIC ) == 0 ) {
3793
- continue ;
3794
- }
3795
-
3796
- prop = & CE_STATIC_MEMBERS (ce )[prop_info -> offset ];
3797
- ZVAL_DEINDIRECT (prop );
3798
-
3799
- if (prop_info -> type && Z_ISUNDEF_P (prop )) {
3800
- continue ;
3801
- }
3802
-
3803
- /* enforce read only access */
3804
- ZVAL_DEREF (prop );
3805
- Z_TRY_ADDREF_P (prop );
3806
-
3807
- zend_hash_update (Z_ARRVAL_P (return_value ), key , prop );
3808
- } ZEND_HASH_FOREACH_END ();
3781
+ add_class_vars (ce , 1 , return_value );
3809
3782
}
3810
3783
/* }}} */
3811
3784
0 commit comments