diff options
author | Lars Strojny <lstrojny@php.net> | 2012-08-28 14:06:18 +0200 |
---|---|---|
committer | Lars Strojny <lstrojny@php.net> | 2012-08-28 14:10:25 +0200 |
commit | 6b1073a3a7030d70a684638f098dbf22affb5c63 (patch) | |
tree | bac6804f2646f92227d78904f722f839526452bc | |
parent | dd9478e6c871418a7e130e5f6cacc7eaa8d92cf4 (diff) | |
download | php-git-6b1073a3a7030d70a684638f098dbf22affb5c63.tar.gz |
Bug #62956: fixing private method signature validation
In inheritance, if both methods are private, don not enforce the same
signature.
-rwxr-xr-x | Zend/tests/bug61761.phpt | 3 | ||||
-rw-r--r-- | Zend/tests/bug62956.phpt | 20 | ||||
-rw-r--r-- | Zend/zend_compile.c | 5 |
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 704db107ca..f7b638f90c 100644 --- a/Zend/zend_compile.c +++ b/Zend/zend_compile.c @@ -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) { |