summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--Zend/zend_compile.c11
1 files changed, 10 insertions, 1 deletions
diff --git a/Zend/zend_compile.c b/Zend/zend_compile.c
index 4ff5de2ef9..1ff9bb1e37 100644
--- a/Zend/zend_compile.c
+++ b/Zend/zend_compile.c
@@ -932,6 +932,7 @@ void zend_do_begin_function_declaration(znode *function_token, znode *function_n
op_array.function_name = name;
op_array.return_reference = return_reference;
op_array.fn_flags = fn_flags;
+ op_array.pass_rest_by_reference = 0;
op_array.scope = CG(active_class_entry);
op_array.prototype = NULL;
@@ -1606,7 +1607,15 @@ static zend_bool zend_do_perform_implementation_check(zend_function *fe)
}
for (i=0; i< fe->common.num_args; i++) {
- if (strcmp(fe->common.arg_info[i].class_name, fe->common.prototype->common.arg_info[i].class_name)!=0) {
+ if (fe->common.arg_info[i].class_name) {
+ if (fe->common.prototype->common.arg_info[i].class_name) {
+ if (strcmp(fe->common.arg_info[i].class_name, fe->common.prototype->common.arg_info[i].class_name)!=0) {
+ return 0;
+ }
+ } else {
+ return 0;
+ }
+ } else if (fe->common.prototype->common.arg_info[i].class_name) {
return 0;
}
if (fe->common.arg_info[i].pass_by_reference != fe->common.prototype->common.arg_info[i].pass_by_reference) {