summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPedro Magalhães <pkemo85@gmail.com>2016-06-30 09:00:33 +0200
committerNikita Popov <nikic@php.net>2016-07-05 14:30:22 +0200
commit08777e9615868cf2acf4dc2a86a7ef21106beddd (patch)
tree0d27d4c7608c1d1b98f7fd9581b0194d42126bf8
parent717a043a323b622c79f5d9806493fed272052605 (diff)
downloadphp-git-08777e9615868cf2acf4dc2a86a7ef21106beddd.tar.gz
Don't enforce LSP if prototype method is private
Fixes bug #72496.
-rw-r--r--NEWS2
-rw-r--r--Zend/tests/bug72496.phpt43
-rw-r--r--Zend/zend_compile.c4
3 files changed, 47 insertions, 2 deletions
diff --git a/NEWS b/NEWS
index a884dbbbeb..eda6726a8c 100644
--- a/NEWS
+++ b/NEWS
@@ -5,6 +5,8 @@ PHP NEWS
- Core:
. Fix bug #71936 (Segmentation fault destroying HTTP_RAW_POST_DATA).
(mike dot laspina at gmail dot com, Remi)
+ . Fix bug #72496 (Cannot declare public method with signature incompatible
+ with parent private method). (Pedro Magalhães)
- bz2:
. Fix bug #72447 (Type Confusion in php_bz2_filter_create()). (gogil at
diff --git a/Zend/tests/bug72496.phpt b/Zend/tests/bug72496.phpt
new file mode 100644
index 0000000000..62e55cb561
--- /dev/null
+++ b/Zend/tests/bug72496.phpt
@@ -0,0 +1,43 @@
+--TEST--
+Bug #72496 (declare public method with signature incompatible with parent private method should not throw a warning)
+--FILE--
+<?php
+class Foo
+{
+ private function getFoo()
+ {
+ return 'Foo';
+ }
+
+ private function getBar()
+ {
+ return 'Bar';
+ }
+
+ private function getBaz()
+ {
+ return 'Baz';
+ }
+}
+
+class Bar extends Foo
+{
+ public function getFoo($extraArgument)
+ {
+ return $extraArgument;
+ }
+
+ protected function getBar($extraArgument)
+ {
+ return $extraArgument;
+ }
+
+ private function getBaz($extraArgument)
+ {
+ return $extraArgument;
+ }
+}
+
+echo "OK\n";
+--EXPECT--
+OK
diff --git a/Zend/zend_compile.c b/Zend/zend_compile.c
index ef152a38f1..5b67ef8295 100644
--- a/Zend/zend_compile.c
+++ b/Zend/zend_compile.c
@@ -3252,8 +3252,8 @@ 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)) {
+ /* If the prototype method is private do not enforce a signature */
+ if (proto->common.fn_flags & ZEND_ACC_PRIVATE) {
return 1;
}