com php-src: Revert "Inheritance checks should not ignore parents if these implement an interface": NEWS Zend/tests/bug62358.phpt Zend/tests/bug73987.phpt Zend/tests/bug73987_1. phpt Zend/zend_inheritance.c

[email protected] (Joe Watkins)
Newsgroups php.cvs
Message-ID <[email protected]>
Commit:    46de334452683953425b25fc0451649eaa6059fe
Author:    Joe Watkins <[email protected]>         Wed, 1 Feb 2017 18:33:58 +0000
Parents:   648238da5c45bdf2c65d856b533f9a2534864ba2
Branches:  PHP-7.1

Link:       http://git.php.net/?p=php-src.git;a=commitdiff;h=46de334452683953425b25fc0451649eaa6059fe

Log:
Revert "Inheritance checks should not ignore parents if these implement an interface"

This reverts commit b67eb3440bb244adf6957bf2c68aeeaa6efc8c8d.

Changed paths:
  M  NEWS
  M  Zend/tests/bug62358.phpt
  D  Zend/tests/bug73987.phpt
  D  Zend/tests/bug73987_1.phpt
  M  Zend/zend_inheritance.c


Diff:
diff --git a/NEWS b/NEWS
index 6514e48..7f600d8 100644
--- a/NEWS
+++ b/NEWS
@@ -15,8 +15,6 @@ PHP                                                                        NEWS
   . Fixed bug #73969 (segfault in debug_print_backtrace). (andrewnester)
   . Fixed bug #73994 (arginfo incorrect for unpack). (krakjoe)
   . Fixed bug #73973 (assertion error in debug_zval_dump). (andrewnester)
-  . Fixed bug #73987 (Method compatibility check looks to original 
-    definition and not parent). (pmmaga)
 
 - DOM:
   . Fixed bug #54382 (getAttributeNodeNS doesn't get xmlns* attributes).
diff --git a/Zend/tests/bug62358.phpt b/Zend/tests/bug62358.phpt
index 8509383..35bbc33 100644
--- a/Zend/tests/bug62358.phpt
+++ b/Zend/tests/bug62358.phpt
@@ -23,4 +23,4 @@ class B extends A {
 }
 ?>
 --EXPECTF--
-Fatal error: Declaration of B::foo($var) must be compatible with A::foo() in %sbug62358.php on line 17
+Fatal error: Declaration of B::foo($var) must be compatible with I::foo() in %sbug62358.php on line 17
diff --git a/Zend/tests/bug73987.phpt b/Zend/tests/bug73987.phpt
deleted file mode 100644
index 5515656..0000000
--- a/Zend/tests/bug73987.phpt
+++ /dev/null
@@ -1,18 +0,0 @@
---TEST--
-Bug #73987 (Method compatibility check looks to original definition and not parent)
---FILE--
-<?php
-
-interface I {
-  public function example($a, $b, $c);
-}
-class A implements I {
-  public function example($a, $b = null, $c = null) { } // compatible with I::example
-}
-class B extends A {
-  public function example($a, $b, $c = null) { } // compatible with I::example
-}
-
-?>
---EXPECTF--
-Fatal error: Declaration of B::example($a, $b, $c = NULL) must be compatible with A::example($a, $b = NULL, $c = NULL) in %s
diff --git a/Zend/tests/bug73987_1.phpt b/Zend/tests/bug73987_1.phpt
deleted file mode 100644
index 6a0a157..0000000
--- a/Zend/tests/bug73987_1.phpt
+++ /dev/null
@@ -1,18 +0,0 @@
---TEST--
-Bug #73987 (Method compatibility check looks to original definition and not parent)
---FILE--
-<?php
-
-interface I {
-  public function example();
-}
-class A implements I {
-  public function example(): int { } // compatible with I::example
-}
-class B extends A {
-  public function example(): string { } // compatible with I::example
-}
-
-?>
---EXPECTF--
-Fatal error: Declaration of B::example(): string must be compatible with A::example(): int in %s
diff --git a/Zend/zend_inheritance.c b/Zend/zend_inheritance.c
index 8ad5cc2..fd1345f 100644
--- a/Zend/zend_inheritance.c
+++ b/Zend/zend_inheritance.c
@@ -607,12 +607,13 @@ static void do_inheritance_check_on_method(zend_function *child, zend_function *
 	} else if (!(parent->common.fn_flags & ZEND_ACC_CTOR) || (parent->common.prototype && (parent->common.prototype->common.scope->ce_flags & ZEND_ACC_INTERFACE))) {
 		/* ctors only have a prototype if it comes from an interface */
 		child->common.prototype = parent->common.prototype ? parent->common.prototype : parent;
-		/* and if that is the case, we want to check inheritance against it */
-		if (parent->common.fn_flags & ZEND_ACC_CTOR) {
-			parent = child->common.prototype;
-		}
 	}
 
+	if (child->common.prototype && (
+		child->common.prototype->common.fn_flags & ZEND_ACC_ABSTRACT
+	)) {
+		parent = child->common.prototype;
+	}
 	if (UNEXPECTED(!zend_do_perform_implementation_check(child, parent))) {
 		int error_level;
 		const char *error_verb;
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.