summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDmitry Stogov <dmitry@php.net>2007-08-08 13:32:58 +0000
committerDmitry Stogov <dmitry@php.net>2007-08-08 13:32:58 +0000
commitad8aa49f065a6563da73090d1a3f228719c072f9 (patch)
tree853678fcce87b649af4a40227834d54d2a6f59c9
parent8d87a8cf7094ff51cfa0acb0c98ef422c622ca42 (diff)
downloadphp-git-ad8aa49f065a6563da73090d1a3f228719c072f9.tar.gz
Fixed bug #42211 (property_exists() fails to find protected properties from a parent class)
-rw-r--r--Zend/tests/bug42211.phpt30
-rw-r--r--Zend/zend_builtin_functions.c3
2 files changed, 32 insertions, 1 deletions
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 e89552bbcc..976c713090 100644
--- a/Zend/zend_builtin_functions.c
+++ b/Zend/zend_builtin_functions.c
@@ -1014,7 +1014,8 @@ ZEND_FUNCTION(property_exists)
}
zend_u_unmangle_property_name(Z_TYPE_PP(property), property_info->name, property_info->name_length, &class_name, &prop_name);
if (class_name.s[0] == '*') {
- 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;