From: Felipe Pena Date: Sun, 1 Jun 2008 03:13:54 +0000 (+0000) Subject: - MFB: Fixed bug #45139 (ReflectionProperty returns incorrect declaring class) X-Git-Tag: BEFORE_HEAD_NS_CHANGE~1619 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=a9e910eebd18e0fee0ea6ccdaff8f5ec04b3886b;p=php - MFB: Fixed bug #45139 (ReflectionProperty returns incorrect declaring class) --- diff --git a/ext/reflection/php_reflection.c b/ext/reflection/php_reflection.c index afb7a565de..305533c4f4 100644 --- a/ext/reflection/php_reflection.c +++ b/ext/reflection/php_reflection.c @@ -4202,7 +4202,7 @@ ZEND_METHOD(reflection_property, getDeclaringClass) prop_name_len = USTR_LEN(prop_name); ce = tmp_ce = ref->ce; while (tmp_ce && zend_u_hash_find(&tmp_ce->properties_info, UG(unicode)?IS_UNICODE:IS_STRING, prop_name, prop_name_len + 1, (void **) &tmp_info) == SUCCESS) { - if (tmp_info->flags & ZEND_ACC_PRIVATE) { + if (tmp_info->flags & ZEND_ACC_PRIVATE || tmp_info->flags & ZEND_ACC_SHADOW) { /* it's a private property, so it can't be inherited */ break; } diff --git a/ext/reflection/tests/bug45139.phpt b/ext/reflection/tests/bug45139.phpt new file mode 100644 index 0000000000..1c0507e14b --- /dev/null +++ b/ext/reflection/tests/bug45139.phpt @@ -0,0 +1,58 @@ +--TEST-- +Bug #45139 (ReflectionProperty returns incorrect declaring class) +--FILE-- +getProperty('foo'); +var_dump($rp->getDeclaringClass()->getName()); // c + +$rc = new ReflectionClass('A'); +$rp = $rc->getProperty('foo'); +var_dump($rp->getDeclaringClass()->getName()); // A + +$rc = new ReflectionClass('B'); +$rp = $rc->getProperty('bar'); +var_dump($rp->getDeclaringClass()->getName()); // B + +$rc = new ReflectionClass('C'); +$rp = $rc->getProperty('bar'); +var_dump($rp->getDeclaringClass()->getName()); // B + +$rc = new ReflectionClass('C'); +$rp = $rc->getProperty('baz'); +var_dump($rp->getDeclaringClass()->getName()); // C + +$rc = new ReflectionClass('B'); +$rp = $rc->getProperty('baz'); +var_dump($rp->getDeclaringClass()->getName()); // B + +$rc = new ReflectionClass('C'); +$rp = $rc->getProperty('quux'); +var_dump($rp->getDeclaringClass()->getName()); // C + +?> +--EXPECT-- +unicode(1) "C" +unicode(1) "A" +unicode(1) "B" +unicode(1) "B" +unicode(1) "C" +unicode(1) "B" +unicode(1) "C"