Permalink
Browse files

Bug #62956: fixing private method signature validation

In inheritance, if both methods are private, don not enforce the same
signature.
  • Loading branch information...
1 parent dd9478e commit 6b1073a3a7030d70a684638f098dbf22affb5c63 @lstrojny lstrojny committed Aug 28, 2012
Showing with 27 additions and 1 deletion.
  1. +2 −1 Zend/tests/bug61761.phpt
  2. +20 −0 Zend/tests/bug62956.phpt
  3. +5 −0 Zend/zend_compile.c
View
@@ -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==
View
@@ -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==
View
@@ -2969,6 +2969,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) {

0 comments on commit 6b1073a

Please sign in to comment.