summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLars Strojny <lstrojny@php.net>2012-08-28 14:06:18 +0200
committerLars Strojny <lstrojny@php.net>2012-08-28 14:06:18 +0200
commitf82dd2c77463e01cbcc9912be08f5e45cb1a384c (patch)
tree6a0f37057328dd609fe59d22cbe87a22fac31ddd
parentc11106734d0fbccccd81ac8332e5a4132d0c6a06 (diff)
downloadphp-git-f82dd2c77463e01cbcc9912be08f5e45cb1a384c.tar.gz
Bug #62956: fixing private method signature validation
In inheritance, if both methods are private, don not enforce the same signature.
-rwxr-xr-xZend/tests/bug61761.phpt3
-rw-r--r--Zend/tests/bug62956.phpt20
-rw-r--r--Zend/zend_compile.c5
3 files changed, 27 insertions, 1 deletions
diff --git a/Zend/tests/bug61761.phpt b/Zend/tests/bug61761.phpt
index 631f566eaa..24c69ae792 100755
--- a/Zend/tests/bug61761.phpt
+++ b/Zend/tests/bug61761.phpt
@@ -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
index 0000000000..c8694d5bea
--- /dev/null
+++ b/Zend/tests/bug62956.phpt
@@ -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==
diff --git a/Zend/zend_compile.c b/Zend/zend_compile.c
index 09383c12d0..bf458e114f 100644
--- a/Zend/zend_compile.c
+++ b/Zend/zend_compile.c
@@ -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) {