summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDmitry Stogov <dmitry@php.net>2007-08-08 13:32:46 +0000
committerDmitry Stogov <dmitry@php.net>2007-08-08 13:32:46 +0000
commitef7166481700b670156f9ea80b84a53200ebc698 (patch)
treee39b95b7841ad72d2e39e5ba887cf74240a963bb
parent9bd00453598ef6baefc191d644ede998d6d8b504 (diff)
downloadphp-git-ef7166481700b670156f9ea80b84a53200ebc698.tar.gz
Fixed bug #42211 (property_exists() fails to find protected properties from a parent class)
-rw-r--r--NEWS2
-rw-r--r--Zend/tests/bug42211.phpt30
-rw-r--r--Zend/zend_builtin_functions.c3
3 files changed, 34 insertions, 1 deletions
diff --git a/NEWS b/NEWS
index 38ed700c8a..1f974e1dc8 100644
--- a/NEWS
+++ b/NEWS
@@ -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;