@@ -3845,9 +3845,7 @@ 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_PROTECTED ) &&
3849
- !zend_check_protected (prop_info -> ce , ce )) ||
3850
- ((prop_info -> flags & ZEND_ACC_PRIVATE ) &&
3848
+ if (((prop_info -> flags & ZEND_ACC_PRIVATE ) &&
3851
3849
prop_info -> ce != ce )) {
3852
3850
continue ;
3853
3851
}
@@ -3885,6 +3883,9 @@ ZEND_METHOD(ReflectionClass, getStaticProperties)
3885
3883
{
3886
3884
reflection_object * intern ;
3887
3885
zend_class_entry * ce ;
3886
+ zend_property_info * prop_info ;
3887
+ zval * prop ;
3888
+ zend_string * key ;
3888
3889
3889
3890
if (zend_parse_parameters_none () == FAILURE ) {
3890
3891
RETURN_THROWS ();
@@ -3896,8 +3897,34 @@ ZEND_METHOD(ReflectionClass, getStaticProperties)
3896
3897
return ;
3897
3898
}
3898
3899
3900
+ if (!CE_STATIC_MEMBERS (ce )) {
3901
+ zend_class_init_statics (ce );
3902
+ }
3903
+
3899
3904
array_init (return_value );
3900
- add_class_vars (ce , 1 , 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 ();
3901
3928
}
3902
3929
/* }}} */
3903
3930
0 commit comments