]> granicus.if.org Git - php/commitdiff
Fixed bug #42211 (property_exists() fails to find protected properties from a parent...
authorDmitry Stogov <dmitry@php.net>
Wed, 8 Aug 2007 13:32:58 +0000 (13:32 +0000)
committerDmitry Stogov <dmitry@php.net>
Wed, 8 Aug 2007 13:32:58 +0000 (13:32 +0000)
Zend/tests/bug42211.phpt [new file with mode: 0644]
Zend/zend_builtin_functions.c

diff --git a/Zend/tests/bug42211.phpt b/Zend/tests/bug42211.phpt
new file mode 100644 (file)
index 0000000..e9f2a1e
--- /dev/null
@@ -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)
+
index e89552bbcccd717e8ee9596dea653027e203c615..976c713090fc08be3cfddafa779f57fc2d83fabc 100644 (file)
@@ -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;