]> granicus.if.org Git - php/commitdiff
Bug #62956: fixing private method signature validation
authorLars Strojny <lstrojny@php.net>
Tue, 28 Aug 2012 12:06:18 +0000 (14:06 +0200)
committerLars Strojny <lstrojny@php.net>
Tue, 28 Aug 2012 12:06:18 +0000 (14:06 +0200)
In inheritance, if both methods are private, don not enforce the same
signature.

Zend/tests/bug61761.phpt
Zend/tests/bug62956.phpt [new file with mode: 0644]
Zend/zend_compile.c

index 631f566eaa35ad1b01594db5abe554562754e481..24c69ae792e30f6492e46c7c6df9b45f5994fc68 100755 (executable)
@@ -14,5 +14,6 @@ class B extends A
 }
 
 ?>
+==DONE==
 --EXPECTF--
-Strict Standards: Declaration of B::test() should be compatible with A::test($a) in %sbug61761.php on line %d
+==DONE==
diff --git a/Zend/tests/bug62956.phpt b/Zend/tests/bug62956.phpt
new file mode 100644 (file)
index 0000000..c8694d5
--- /dev/null
@@ -0,0 +1,20 @@
+--TEST--
+Bug #62956: "incompatible" signatures for private methods should not cause E_STRICT
+--FILE--
+<?php
+class Base
+{
+       private function test()
+       {}
+}
+
+class Extension extends Base
+{
+       private function test($arg)
+       {}
+}
+
+?>
+==DONE==
+--EXPECT--
+==DONE==
index 09383c12d09a04ab9466e6a5179557620125c0b2..bf458e114fba2d38b9371f85cd58dd805bb12c96 100644 (file)
@@ -2935,6 +2935,11 @@ static zend_bool zend_do_perform_implementation_check(const zend_function *fe, c
                return 1;
        }
 
+       /* If both methods are private do not enforce a signature */
+    if ((fe->common.fn_flags & ZEND_ACC_PRIVATE) && (proto->common.fn_flags & ZEND_ACC_PRIVATE)) {
+               return 1;
+       }
+
        /* check number of arguments */
        if (proto->common.required_num_args < fe->common.required_num_args
                || proto->common.num_args > fe->common.num_args) {