diff options
-rw-r--r-- | Zend/zend_compile.c | 17 |
1 files changed, 9 insertions, 8 deletions
diff --git a/Zend/zend_compile.c b/Zend/zend_compile.c index a2e0f0c0db..cd393bf379 100644 --- a/Zend/zend_compile.c +++ b/Zend/zend_compile.c @@ -786,16 +786,17 @@ void do_receive_arg(int op, znode *var, znode *offset, znode *initialization, un } else { SET_UNUSED(opline->op2); } - if (pass_type==BYREF_FORCE && !CG(active_op_array)->arg_types) { - int i; + if (!CG(active_op_array)->arg_types) { + if (pass_type==BYREF_FORCE) { + int i; - CG(active_op_array)->arg_types = (unsigned char *) emalloc(sizeof(unsigned char)*(offset->u.constant.value.lval+1)); - for (i=1; i<offset->u.constant.value.lval; i++) { - CG(active_op_array)->arg_types[i] = BYREF_NONE; + CG(active_op_array)->arg_types = (unsigned char *) emalloc(sizeof(unsigned char)*(offset->u.constant.value.lval+1)); + for (i=1; i<offset->u.constant.value.lval; i++) { + CG(active_op_array)->arg_types[i] = BYREF_NONE; + } + CG(active_op_array)->arg_types[0]=(unsigned char) offset->u.constant.value.lval; } - CG(active_op_array)->arg_types[0]=(unsigned char) offset->u.constant.value.lval; - } - if (CG(active_op_array)->arg_types) { + } else { CG(active_op_array)->arg_types = (unsigned char *) erealloc(CG(active_op_array)->arg_types, sizeof(unsigned char)*(offset->u.constant.value.lval+1)); CG(active_op_array)->arg_types[offset->u.constant.value.lval] = pass_type; CG(active_op_array)->arg_types[0]++; |