@@ -3845,7 +3845,9 @@ static void add_class_vars(zend_class_entry *ce, zend_bool statics, zval *return
3845
3845
zend_string * key ;
3846
3846
3847
3847
ZEND_HASH_FOREACH_STR_KEY_PTR (& ce -> properties_info , key , prop_info ) {
3848
- if (((prop_info -> flags & ZEND_ACC_PRIVATE ) &&
3848
+ if (((prop_info -> flags & ZEND_ACC_PROTECTED ) &&
3849
+ !zend_check_protected (prop_info -> ce , ce )) ||
3850
+ ((prop_info -> flags & ZEND_ACC_PRIVATE ) &&
3849
3851
prop_info -> ce != ce )) {
3850
3852
continue ;
3851
3853
}
@@ -3883,9 +3885,6 @@ ZEND_METHOD(ReflectionClass, getStaticProperties)
3883
3885
{
3884
3886
reflection_object * intern ;
3885
3887
zend_class_entry * ce ;
3886
- zend_property_info * prop_info ;
3887
- zval * prop ;
3888
- zend_string * key ;
3889
3888
3890
3889
if (zend_parse_parameters_none () == FAILURE ) {
3891
3890
RETURN_THROWS ();
@@ -3897,34 +3896,8 @@ ZEND_METHOD(ReflectionClass, getStaticProperties)
3897
3896
return ;
3898
3897
}
3899
3898
3900
- if (!CE_STATIC_MEMBERS (ce )) {
3901
- zend_class_init_statics (ce );
3902
- }
3903
-
3904
3899
array_init (return_value );
3905
-
3906
- ZEND_HASH_FOREACH_STR_KEY_PTR (& ce -> properties_info , key , prop_info ) {
3907
- if (((prop_info -> flags & ZEND_ACC_PRIVATE ) &&
3908
- prop_info -> ce != ce )) {
3909
- continue ;
3910
- }
3911
- if ((prop_info -> flags & ZEND_ACC_STATIC ) == 0 ) {
3912
- continue ;
3913
- }
3914
-
3915
- prop = & CE_STATIC_MEMBERS (ce )[prop_info -> offset ];
3916
- ZVAL_DEINDIRECT (prop );
3917
-
3918
- if (prop_info -> type && Z_ISUNDEF_P (prop )) {
3919
- continue ;
3920
- }
3921
-
3922
- /* enforce read only access */
3923
- ZVAL_DEREF (prop );
3924
- Z_TRY_ADDREF_P (prop );
3925
-
3926
- zend_hash_update (Z_ARRVAL_P (return_value ), key , prop );
3927
- } ZEND_HASH_FOREACH_END ();
3900
+ add_class_vars (ce , 1 , return_value );
3928
3901
}
3929
3902
/* }}} */
3930
3903
0 commit comments