Commit:    396c1e990a0e513cf2e8510e9b6f82ab425c9e3a
Author:    Dmitry Stogov <dmi...@zend.com>         Tue, 20 Nov 2012 12:51:55 
+0400
Parents:   d412152f31f145bf07b243465cdffa84ceba70be
Branches:  PHP-5.3 PHP-5.4 PHP-5.5 master

Link:       
http://git.php.net/?p=php-src.git;a=commitdiff;h=396c1e990a0e513cf2e8510e9b6f82ab425c9e3a

Log:
Fixed bug #63468 (wrong called method as callback with inheritance)

Bugs:
https://bugs.php.net/63468

Changed paths:
  M  NEWS
  A  Zend/tests/bug63468.phpt
  M  Zend/zend_API.c


Diff:
diff --git a/NEWS b/NEWS
index 4f89d07..717a382 100644
--- a/NEWS
+++ b/NEWS
@@ -5,6 +5,8 @@ PHP                                                             
           NEWS
 - Zend Engine:
   . Fixed bug #63512 (parse_ini_file() with INI_SCANNER_RAW removes quotes 
     from value). (Pierrick)
+  . Fixed bug #63468 (wrong called method as callback with inheritance).
+    (Laruence)
 - Core:
   . Fixed bug #63451 (config.guess file does not have AIX 7 defined, 
     shared objects are not created). (kemcline at au1 dot ibm dot com)
diff --git a/Zend/tests/bug63468.phpt b/Zend/tests/bug63468.phpt
new file mode 100644
index 0000000..00b5a41
--- /dev/null
+++ b/Zend/tests/bug63468.phpt
@@ -0,0 +1,30 @@
+--TEST--
+Bug #63468 (wrong called method as callback with inheritance)
+--FILE--
+<?php
+class Foo
+{
+       public function run()
+       {
+               return call_user_func(array('Bar', 'getValue'));
+       }
+
+       private static function getValue()
+       {
+               return 'Foo';
+       }
+}
+
+class Bar extends Foo
+{
+       public static function getValue()
+       {
+               return 'Bar';
+       }
+}
+
+$x = new Bar;
+var_dump($x->run());
+--EXPECT--
+string(3) "Bar"
+
diff --git a/Zend/zend_API.c b/Zend/zend_API.c
index d529775..c1b501b 100644
--- a/Zend/zend_API.c
+++ b/Zend/zend_API.c
@@ -2520,7 +2520,7 @@ static int zend_is_callable_check_func(int check_flags, 
zval *callable, zend_fca
        } else if (zend_hash_find(ftable, lmname, mlen+1, 
(void**)&fcc->function_handler) == SUCCESS) {
                retval = 1;
                if ((fcc->function_handler->op_array.fn_flags & 
ZEND_ACC_CHANGED) &&
-                   EG(scope) &&
+                   !strict_class && EG(scope) &&
                    instanceof_function(fcc->function_handler->common.scope, 
EG(scope) TSRMLS_CC)) {
                        zend_function *priv_fbc;


--
PHP CVS Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php

Reply via email to