]> granicus.if.org Git - php/commitdiff
- Fixed bug #48899 (is_callable returns true even if method does not exist in parent...
authorFelipe Pena <felipe@php.net>
Wed, 15 Jul 2009 01:08:15 +0000 (01:08 +0000)
committerFelipe Pena <felipe@php.net>
Wed, 15 Jul 2009 01:08:15 +0000 (01:08 +0000)
Zend/tests/bug48899.phpt [new file with mode: 0644]
Zend/zend_API.c

diff --git a/Zend/tests/bug48899.phpt b/Zend/tests/bug48899.phpt
new file mode 100644 (file)
index 0000000..ff64054
--- /dev/null
@@ -0,0 +1,24 @@
+--TEST--
+Bug #48899 (is_callable returns true even if method does not exist in parent class)
+--FILE--
+<?php
+
+class ParentClass { }
+
+class ChildClass extends ParentClass {
+       public function testIsCallable() {
+               var_dump(is_callable(array($this, 'parent::testIsCallable')));
+       }
+       public function testIsCallable2() {
+               var_dump(is_callable(array($this, 'static::testIsCallable2')));
+       }
+}
+
+$child = new ChildClass();
+$child->testIsCallable();
+$child->testIsCallable2();
+
+?>
+--EXPECT--
+bool(false)
+bool(true)
index 73f44be6524353b16300bf1cd2653c353688c3a0..c147601b1d37251c15b9550ead498cec57474ff6 100644 (file)
@@ -2907,7 +2907,7 @@ static int zend_is_callable_check_func(int check_flags, zval *callable, zend_fca
                }
        } else {
 get_function_via_handler:
-               if (fcc->object_ptr) {
+               if (fcc->object_ptr && fcc->calling_scope == ce_org) {
                        if (Z_OBJ_HT_P(fcc->object_ptr)->get_method) {
                                zstr method = mname;
                                int method_len = mlen;