Skip to content

Commit

Permalink
Fix resolution of "parent" during inheritance check
Browse files Browse the repository at this point in the history
We can't assume that the method we're checking against is part of
the parent class...
  • Loading branch information
nikic committed May 8, 2019
1 parent 9977de0 commit d19b6aa
Show file tree
Hide file tree
Showing 2 changed files with 19 additions and 2 deletions.
17 changes: 17 additions & 0 deletions Zend/tests/type_declarations/parent_is_not_proto.phpt
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
--TEST--
The parent class is not necessarily the class of the prototype
--FILE--
<?php

class A {
function test(): B {}
}
class B extends A {}
class C extends B {
function test(): parent {}
}

?>
===DONE===
--EXPECT--
===DONE===
4 changes: 2 additions & 2 deletions Zend/zend_inheritance.c
Original file line number Diff line number Diff line change
Expand Up @@ -193,8 +193,8 @@ static int zend_do_perform_type_hint_check(const zend_function *fe, zend_arg_inf
fe_class_name = ZEND_TYPE_NAME(fe_arg_info->type);
class_name = ZSTR_VAL(fe_class_name);
class_name_len = ZSTR_LEN(fe_class_name);
if (class_name_len == sizeof("parent")-1 && !strcasecmp(class_name, "parent") && proto->common.scope) {
fe_class_name = zend_string_copy(proto->common.scope->name);
if (class_name_len == sizeof("parent")-1 && !strcasecmp(class_name, "parent") && fe->common.scope && fe->common.scope->parent) {
fe_class_name = zend_string_copy(fe->common.scope->parent->name);
} else if (class_name_len == sizeof("self")-1 && !strcasecmp(class_name, "self") && fe->common.scope) {
fe_class_name = zend_string_copy(fe->common.scope->name);
} else {
Expand Down

0 comments on commit d19b6aa

Please sign in to comment.