com php-src: Bug #71428 work ... hopefully, fix drupal 8: Zend/tests/bug71428.2.phpt Zend/zend_inheritance.c
| From: | Joe Watkins | Date: | Tue, 29 Mar 2016 08:36:08 +0000 |
| Subject: | com php-src: Bug #71428 work ... hopefully, fix drupal 8: Zend/tests/bug71428.2.phpt Zend/zend_inheritance.c | ||
| Groups: | php.cvs | ||
| Request: | Send a blank email to php-cvs+get-91519@lists.php.net to get a copy of this message | ||
Commit: 3f56dfe8660b45c72dee7adcd856dd9a7049cf5b
Author: Joe Watkins <krakjoe@php.net> Tue, 29 Mar 2016 09:36:08 +0100
Parents: ee9a78a033696ff9546fb1dbfecd28f20477b511
Branches: master
Link: http://git.php.net/?p=php-src.git;a=commitdiff;h=3f56dfe8660b45c72dee7adcd856dd9a7049cf5b
Log:
Bug #71428 work ... hopefully, fix drupal 8
Bugs:
https://bugs.php.net/71428
Changed paths:
A Zend/tests/bug71428.2.phpt
M Zend/zend_inheritance.c
Diff:
diff --git a/Zend/tests/bug71428.2.phpt b/Zend/tests/bug71428.2.phpt
new file mode 100644
index 0000000..3d8b257
--- /dev/null
+++ b/Zend/tests/bug71428.2.phpt
@@ -0,0 +1,23 @@
+--TEST--
+bug #71428.2: inheritance of ye olde dynamic interfaces
+--SKIPIF--
+<?php if (!extension_loaded('pdo')) ?>
+--FILE--
+<?php
+interface StatementInterface {
+ public function fetch($first = null, $second, $third);
+}
+
+class Statement extends PDOStatement implements StatementInterface {}
+
+interface StatementInterface1 {
+ public function fetch($first = null, $second = null, $third = null);
+}
+
+class Statement1 extends PDOStatement implements StatementInterface1 {}
+
+echo "ok";
+?>
+--EXPECT--
+ok
+
diff --git a/Zend/zend_inheritance.c b/Zend/zend_inheritance.c
index d904a58..b52f454 100644
--- a/Zend/zend_inheritance.c
+++ b/Zend/zend_inheritance.c
@@ -167,7 +167,7 @@ char *zend_visibility_string(uint32_t fn_flags) /* {{{ */
}
/* }}} */
-static int zend_do_perform_type_hint_check(const zend_function *fe, zend_arg_info *fe_arg_info,
const zend_function *proto, zend_arg_info *proto_arg_info) /* {{{ */
+static int zend_do_perform_type_hint_check(const zend_function *fe, uint32_t arg_num, zend_arg_info
*fe_arg_info, const zend_function *proto, zend_arg_info *proto_arg_info) /* {{{ */
{
if (ZEND_LOG_XOR(fe_arg_info->class_name, proto_arg_info->class_name)) {
/* Only one has a type declaration and the other one doesn't */
@@ -238,13 +238,13 @@ static int zend_do_perform_type_hint_check(const zend_function *fe,
zend_arg_inf
zend_string_release(fe_class_name);
}
- if (proto_arg_info->allow_null && !fe_arg_info->allow_null) {
- /* incompatible nullability */
+ if (fe_arg_info->type_hint != proto_arg_info->type_hint) {
+ /* Incompatible type */
return 0;
}
- if (fe_arg_info->type_hint != proto_arg_info->type_hint) {
- /* Incompatible type */
+ if (proto_arg_info->type_hint && proto_arg_info->allow_null &&
!fe_arg_info->allow_null) {
+ /* incompatible nullability */
return 0;
}
@@ -320,7 +320,7 @@ static zend_bool zend_do_perform_implementation_check(const zend_function *fe, c
proto_arg_info = &proto->common.arg_info[proto->common.num_args];
}
- if (!zend_do_perform_type_hint_check(fe, fe_arg_info, proto, proto_arg_info)) {
+ if (!zend_do_perform_type_hint_check(fe, i, fe_arg_info, proto, proto_arg_info)) {
return 0;
}
@@ -338,7 +338,7 @@ static zend_bool zend_do_perform_implementation_check(const zend_function *fe, c
return 0;
}
- if (!zend_do_perform_type_hint_check(fe, fe->common.arg_info - 1, proto,
proto->common.arg_info - 1)) {
+ if (!zend_do_perform_type_hint_check(fe, i, fe->common.arg_info - 1, proto,
proto->common.arg_info - 1)) {
return 0;
}
}