Browse Source

- Fixed bug #49719 (ReflectionClass::hasProperty returns true for a private property in base class)

PHP-5.2.1RC1
Felipe Pena 17 years ago
parent
commit
caa28c2a22
  1. 2
      NEWS
  2. 9
      ext/reflection/php_reflection.c
  3. 2
      ext/reflection/tests/ReflectionClass_hasProperty_001.phpt
  4. 30
      ext/reflection/tests/bug49719.phpt

2
NEWS

@ -37,6 +37,8 @@ PHP NEWS
- Fixed bug #48752 (Crash during date parsing with invalid date). (Pierre)
- Fixed bug #49738 (calling mcrypt() after mcrypt_generic_deinit() crashes).
(Sriram Natarajan)
- Fixed bug #49719 (ReflectionClass::hasProperty returns true for a private
property in base class). (Felipe)
- Fixed bug #49698 (Unexpected change in strnatcasecmp()). (Rasmus)
- Fixed bug #49647 (DOMUserData does not exist). (Rob)
- Fixed bug #49630 (imap_listscan() function missing). (Felipe)

9
ext/reflection/php_reflection.c

@ -3104,6 +3104,7 @@ ZEND_METHOD(reflection_class, getMethods)
ZEND_METHOD(reflection_class, hasProperty)
{
reflection_object *intern;
zend_property_info *property_info;
zend_class_entry *ce;
char *name;
int name_len;
@ -3115,11 +3116,13 @@ ZEND_METHOD(reflection_class, hasProperty)
}
GET_REFLECTION_OBJECT_PTR(ce);
if (zend_hash_exists(&ce->properties_info, name, name_len + 1)) {
if (zend_hash_find(&ce->properties_info, name, name_len+1, (void **) &property_info) == SUCCESS) {
if (property_info->flags & ZEND_ACC_SHADOW) {
RETURN_FALSE;
}
RETURN_TRUE;
} else {
if (intern->obj && Z_OBJ_HANDLER_P(intern->obj, has_property))
{
if (intern->obj && Z_OBJ_HANDLER_P(intern->obj, has_property)) {
MAKE_STD_ZVAL(property);
ZVAL_STRINGL(property, name, name_len, 1);
if (Z_OBJ_HANDLER_P(intern->obj, has_property)(intern->obj, property, 2 TSRMLS_CC)) {

2
ext/reflection/tests/ReflectionClass_hasProperty_001.phpt

@ -69,7 +69,7 @@ Reflecting on class privf:
--> Check for doesntExist: bool(false)
Reflecting on class subprivf:
--> Check for s: bool(true)
--> Check for a: bool(true)
--> Check for a: bool(false)
--> Check for A: bool(false)
--> Check for doesntExist: bool(false)

30
ext/reflection/tests/bug49719.phpt

@ -0,0 +1,30 @@
--TEST--
Bug #49719 (ReflectionClass::hasProperty returns true for a private property in base class)
--FILE--
<?php
class A {
private $a;
}
class B extends A {
private $b;
}
try {
$b = new B;
$ref = new ReflectionClass($b);
var_dump(property_exists('b', 'a'));
var_dump(property_exists($b, 'a'));
var_dump($ref->hasProperty('a'));
var_dump($ref->getProperty('a'));
} catch (Exception $e) {
var_dump($e->getMessage());
}
?>
--EXPECTF--
bool(false)
bool(false)
bool(false)
%string|unicode%(25) "Property a does not exist"
Loading…
Cancel
Save