dmitry Thu Jul 12 10:32:26 2007 UTC
Modified files:
/ZendEngine2 zend_object_handlers.c
/ZendEngine2/tests bug41961.phpt
Log:
Fixed bug #41961 (Ensure search for hidden private methods does not stray
from class hierarchy). (robin_fernandes at uk dot ibm dot com)
http://cvs.php.net/viewvc.cgi/ZendEngine2/zend_object_handlers.c?r1=1.185&r2=1.186&diff_format=u
Index: ZendEngine2/zend_object_handlers.c
diff -u ZendEngine2/zend_object_handlers.c:1.185
ZendEngine2/zend_object_handlers.c:1.186
--- ZendEngine2/zend_object_handlers.c:1.185 Wed Jul 11 11:19:58 2007
+++ ZendEngine2/zend_object_handlers.c Thu Jul 12 10:32:26 2007
@@ -17,7 +17,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: zend_object_handlers.c,v 1.185 2007/07/11 11:19:58 tony2001 Exp $ */
+/* $Id: zend_object_handlers.c,v 1.186 2007/07/12 10:32:26 dmitry Exp $ */
#include "zend.h"
#include "zend_globals.h"
@@ -833,7 +833,9 @@
/* Ensure that we haven't overridden a private function and end
up calling
* the overriding public function...
*/
- if (EG(scope) && fbc->op_array.fn_flags & ZEND_ACC_CHANGED) {
+ if (EG(scope) &&
+ is_derived_class(fbc->common.scope, EG(scope)) &&
+ fbc->op_array.fn_flags & ZEND_ACC_CHANGED) {
zend_function *priv_fbc;
if (zend_u_hash_find(&EG(scope)->function_table, type,
lc_method_name, lc_method_name_len+1, (void **) &priv_fbc)==SUCCESS
http://cvs.php.net/viewvc.cgi/ZendEngine2/tests/bug41961.phpt?r1=1.1&r2=1.2&diff_format=u
Index: ZendEngine2/tests/bug41961.phpt
diff -u /dev/null ZendEngine2/tests/bug41961.phpt:1.2
--- /dev/null Thu Jul 12 10:32:26 2007
+++ ZendEngine2/tests/bug41961.phpt Thu Jul 12 10:32:26 2007
@@ -0,0 +1,29 @@
+--TEST--
+Bug #41961 (Ensure search for hidden private methods does not stray from class
hierarchy)
+--FILE--
+<?php
+X::test();
+
+/** Class X is related to neither ParentClass nor ChildClass. */
+class X {
+ public static function test() {
+ $myChild = new ChildClass;
+ $myChild->secret(); // bug - invokes X::secret() instead of
ChildClass::secret()
+ }
+ private function secret() {
+ echo "Called private " . __METHOD__ . "() on an instance of: " .
get_class($this) . "\n";
+ }
+}
+
+class ParentClass {
+ private function secret() { }
+}
+
+class ChildClass extends ParentClass {
+ public function secret() {
+ echo "Called public " . __METHOD__ . "() on an instance of: " .
get_class($this) . "\n";
+ }
+}
+?>
+--EXPECT--
+Called public ChildClass::secret() on an instance of: ChildClass
--
Zend Engine CVS Mailing List (http://cvs.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php
|