diff options
author | Dmitry Stogov <dmitry@php.net> | 2007-08-08 13:32:46 +0000 |
---|---|---|
committer | Dmitry Stogov <dmitry@php.net> | 2007-08-08 13:32:46 +0000 |
commit | ef7166481700b670156f9ea80b84a53200ebc698 (patch) | |
tree | e39b95b7841ad72d2e39e5ba887cf74240a963bb | |
parent | 9bd00453598ef6baefc191d644ede998d6d8b504 (diff) | |
download | php-git-ef7166481700b670156f9ea80b84a53200ebc698.tar.gz |
Fixed bug #42211 (property_exists() fails to find protected properties from a parent class)
-rw-r--r-- | NEWS | 2 | ||||
-rw-r--r-- | Zend/tests/bug42211.phpt | 30 | ||||
-rw-r--r-- | Zend/zend_builtin_functions.c | 3 |
3 files changed, 34 insertions, 1 deletions
@@ -5,6 +5,8 @@ PHP NEWS streams). (andrew dot minerd at sellingsource dot com, Ilia) - Fixed bug #42233 (Problems with æøå in extract()). (Jani) - Fixed bug #42222 (possible buffer overflow in php_openssl_make_REQ). (Pierre) +- Fixed bug #42211 (property_exists() fails to find protected properties from + a parent class). (Dmitry) - Fixed bug #42208 (substr_replace() crashes when the same array is passed more than once). (crrodriguez at suse dot de, Ilia) - Fixed bug #42198 (SCRIPT_NAME and PHP_SELF truncated when inside a userdir diff --git a/Zend/tests/bug42211.phpt b/Zend/tests/bug42211.phpt new file mode 100644 index 0000000000..e9f2a1e212 --- /dev/null +++ b/Zend/tests/bug42211.phpt @@ -0,0 +1,30 @@ +--TEST-- +Bug #42211 (property_exists() fails to find protected properties from a parent class) +--FILE-- +<?php +class A { + function foo() { + var_dump(property_exists('B', 'publicBar')); + var_dump(property_exists('B', 'protectedBar')); + var_dump(property_exists('B', 'privateBar')); + } +} + +class B extends A { + static public $publicBar = "ok"; + static protected $protectedBar = "ok"; + static private $privateBar = "fail"; +} + +$a = new A(); +$a->foo(); +$b = new B(); +$b->foo(); +--EXPECT-- +bool(true) +bool(false) +bool(false) +bool(true) +bool(true) +bool(false) + diff --git a/Zend/zend_builtin_functions.c b/Zend/zend_builtin_functions.c index 0f4cf86b20..7b036edfff 100644 --- a/Zend/zend_builtin_functions.c +++ b/Zend/zend_builtin_functions.c @@ -979,7 +979,8 @@ ZEND_FUNCTION(property_exists) } zend_unmangle_property_name(property_info->name, property_info->name_length, &class_name, &prop_name); if (!strncmp(class_name, "*", 1)) { - if (instanceof_function(EG(scope), ce TSRMLS_CC)) { + if (instanceof_function(EG(scope), ce TSRMLS_CC) || + (EG(This) && instanceof_function(Z_OBJCE_P(EG(This)), ce TSRMLS_CC))) { RETURN_TRUE; } RETURN_FALSE; |