summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChristoph M. Becker <cmbecker69@gmx.de>2020-06-23 19:28:51 +0200
committerChristoph M. Becker <cmbecker69@gmx.de>2020-06-23 19:28:51 +0200
commitf3cccfde9e895a8760a94b87c6516e66eda05761 (patch)
tree3aebe9ca46dc0cb612459e41aff7a2c5555ed43f
parenta895bb6885fbceea3e8375816969d5510d8d082e (diff)
downloadphp-git-f3cccfde9e895a8760a94b87c6516e66eda05761.tar.gz
Revert "Fix #79487: ::getStaticProperties() ignores property modifications"
This reverts commit a895bb6885fbceea3e8375816969d5510d8d082e.
-rw-r--r--NEWS4
-rw-r--r--ext/reflection/php_reflection.c35
-rw-r--r--ext/reflection/tests/bug79487.phpt34
3 files changed, 4 insertions, 69 deletions
diff --git a/NEWS b/NEWS
index a2e1aca953..61513e9174 100644
--- a/NEWS
+++ b/NEWS
@@ -5,10 +5,6 @@ PHP NEWS
- FTP:
. Fixed bug #55857 (ftp_size on large files). (cmb)
-- Reflection:
- . Fixed bug #79487 (::getStaticProperties() ignores property modifications).
- (cmb, Nikita)
-
?? ??? 2020, PHP 7.4.8
- Core:
diff --git a/ext/reflection/php_reflection.c b/ext/reflection/php_reflection.c
index 97066fb13e..dbfb67386e 100644
--- a/ext/reflection/php_reflection.c
+++ b/ext/reflection/php_reflection.c
@@ -3726,7 +3726,9 @@ static void add_class_vars(zend_class_entry *ce, int statics, zval *return_value
zend_string *key;
ZEND_HASH_FOREACH_STR_KEY_PTR(&ce->properties_info, key, prop_info) {
- if (((prop_info->flags & ZEND_ACC_PRIVATE) &&
+ if (((prop_info->flags & ZEND_ACC_PROTECTED) &&
+ !zend_check_protected(prop_info->ce, ce)) ||
+ ((prop_info->flags & ZEND_ACC_PRIVATE) &&
prop_info->ce != ce)) {
continue;
}
@@ -3764,9 +3766,6 @@ ZEND_METHOD(reflection_class, getStaticProperties)
{
reflection_object *intern;
zend_class_entry *ce;
- zend_property_info *prop_info;
- zval *prop;
- zend_string *key;
if (zend_parse_parameters_none() == FAILURE) {
return;
@@ -3778,34 +3777,8 @@ ZEND_METHOD(reflection_class, getStaticProperties)
return;
}
- if (!CE_STATIC_MEMBERS(ce)) {
- zend_class_init_statics(ce);
- }
-
array_init(return_value);
-
- ZEND_HASH_FOREACH_STR_KEY_PTR(&ce->properties_info, key, prop_info) {
- if (((prop_info->flags & ZEND_ACC_PRIVATE) &&
- prop_info->ce != ce)) {
- continue;
- }
- if ((prop_info->flags & ZEND_ACC_STATIC) == 0) {
- continue;
- }
-
- prop = &CE_STATIC_MEMBERS(ce)[prop_info->offset];
- ZVAL_DEINDIRECT(prop);
-
- if (prop_info->type && Z_ISUNDEF_P(prop)) {
- continue;
- }
-
- /* enforce read only access */
- ZVAL_DEREF(prop);
- Z_TRY_ADDREF_P(prop);
-
- zend_hash_update(Z_ARRVAL_P(return_value), key, prop);
- } ZEND_HASH_FOREACH_END();
+ add_class_vars(ce, 1, return_value);
}
/* }}} */
diff --git a/ext/reflection/tests/bug79487.phpt b/ext/reflection/tests/bug79487.phpt
deleted file mode 100644
index 5185c98bba..0000000000
--- a/ext/reflection/tests/bug79487.phpt
+++ /dev/null
@@ -1,34 +0,0 @@
---TEST--
-Bug #79487 (::getStaticProperties() ignores property modifications)
---FILE--
-<?php
-class Foo {
- public static $bar = 'orig';
-}
-
-Foo::$bar = 'new';
-$rc = new ReflectionClass('Foo');
-var_dump($rc->getStaticProperties());
-
-class A {
- public static $a = 'A old';
-}
-class B extends A {
- public static $b = 'B old';
-}
-
-$rc = new ReflectionClass(B::class);
-A::$a = 'A new';
-var_dump($rc->getStaticProperties());
-?>
---EXPECT--
-array(1) {
- ["bar"]=>
- string(3) "new"
-}
-array(2) {
- ["b"]=>
- string(5) "B old"
- ["a"]=>
- string(5) "A new"
-}