From 5670174b66b06c4a7400b228d1fb6df5bf94e965 Mon Sep 17 00:00:00 2001 From: Felipe Pena Date: Sun, 12 Jun 2011 21:10:31 +0000 Subject: [PATCH] - Fixed bug #54624 (class_alias and type hint) --- Zend/tests/bug54624.phpt | 26 ++++++++++++++++++++++++++ Zend/zend_compile.c | 18 +++++++++++++++--- 2 files changed, 41 insertions(+), 3 deletions(-) create mode 100644 Zend/tests/bug54624.phpt diff --git a/Zend/tests/bug54624.phpt b/Zend/tests/bug54624.phpt new file mode 100644 index 0000000000..1d0c1ce87c --- /dev/null +++ b/Zend/tests/bug54624.phpt @@ -0,0 +1,26 @@ +--TEST-- +Bug #54624 (class_alias and type hint) +--FILE-- + +--EXPECTF-- +DONE diff --git a/Zend/zend_compile.c b/Zend/zend_compile.c index 2f3fad9ba4..8cc6eb5ee7 100644 --- a/Zend/zend_compile.c +++ b/Zend/zend_compile.c @@ -2918,11 +2918,23 @@ static zend_bool zend_do_perform_implementation_check(const zend_function *fe, c && strcasecmp(fe->common.arg_info[i].class_name, proto->common.arg_info[i].class_name)!=0) { char *colon; - if (fe->common.type != ZEND_USER_FUNCTION || - strchr(proto->common.arg_info[i].class_name, '\\') != NULL || + if (fe->common.type != ZEND_USER_FUNCTION) { + return 0; + } else if (strchr(proto->common.arg_info[i].class_name, '\\') != NULL || (colon = zend_memrchr(fe->common.arg_info[i].class_name, '\\', fe->common.arg_info[i].class_name_len)) == NULL || strcasecmp(colon+1, proto->common.arg_info[i].class_name) != 0) { - return 0; + zend_class_entry **fe_ce, **proto_ce; + TSRMLS_FETCH(); + int found = zend_lookup_class(fe->common.arg_info[i].class_name, fe->common.arg_info[i].class_name_len, &fe_ce TSRMLS_CC); + int found2 = zend_lookup_class(proto->common.arg_info[i].class_name, proto->common.arg_info[i].class_name_len, &proto_ce TSRMLS_CC); + + /* Check for class alias */ + if (found != SUCCESS || found2 != SUCCESS || + (*fe_ce)->type == ZEND_INTERNAL_CLASS || + (*proto_ce)->type == ZEND_INTERNAL_CLASS || + *fe_ce != *proto_ce) { + return 0; + } } } if (fe->common.arg_info[i].type_hint != proto->common.arg_info[i].type_hint) { -- 2.40.0