diff options
author | Pedro Magalhães <mail@pmmaga.net> | 2017-01-26 23:50:56 +0100 |
---|---|---|
committer | Joe Watkins <krakjoe@php.net> | 2017-01-28 06:28:10 +0000 |
commit | b67eb3440bb244adf6957bf2c68aeeaa6efc8c8d (patch) | |
tree | 297c7842cd672aabd023510186cf23c9684b1279 /Zend/zend_inheritance.c | |
parent | bf914ff75a79aaacffebf689e6dd2b17175070b0 (diff) | |
download | php-git-b67eb3440bb244adf6957bf2c68aeeaa6efc8c8d.tar.gz |
Inheritance checks should not ignore parents if these implement an interface
Diffstat (limited to 'Zend/zend_inheritance.c')
-rw-r--r-- | Zend/zend_inheritance.c | 9 |
1 files changed, 4 insertions, 5 deletions
diff --git a/Zend/zend_inheritance.c b/Zend/zend_inheritance.c index fd1345f844..8ad5cc2e01 100644 --- a/Zend/zend_inheritance.c +++ b/Zend/zend_inheritance.c @@ -607,13 +607,12 @@ 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; |