From: Derick Rethans Date: Wed, 21 Sep 2005 08:12:34 +0000 (+0000) Subject: - Moved the FREE_OP to after the execution of the included file, or eval X-Git-Tag: RELEASE_0_9_0~157 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=c3c9df5ed6992da0fbb516aec003c7d6a9f1a769;p=php - Moved the FREE_OP to after the execution of the included file, or eval statement so that it is safe to access this information in the overridden zend_execute() function, which is what Xdebug does. --- diff --git a/Zend/zend_vm_def.h b/Zend/zend_vm_def.h index 391da2272e..57e8594fa5 100644 --- a/Zend/zend_vm_def.h +++ b/Zend/zend_vm_def.h @@ -2813,7 +2813,6 @@ ZEND_VM_HANDLER(73, ZEND_INCLUDE_OR_EVAL, CONST|TMP|VAR|CV, ANY) if (inc_filename==&tmp_inc_filename) { zval_dtor(&tmp_inc_filename); } - FREE_OP1(); EX_T(opline->result.u.var).var.ptr_ptr = &EX_T(opline->result.u.var).var.ptr; if (new_op_array) { zval *saved_object; @@ -2863,6 +2862,7 @@ ZEND_VM_HANDLER(73, ZEND_INCLUDE_OR_EVAL, CONST|TMP|VAR|CV, ANY) EX_T(opline->result.u.var).var.ptr->type = IS_BOOL; } } + FREE_OP1(); EG(return_value_ptr_ptr) = original_return_value; ZEND_VM_NEXT_OPCODE(); } diff --git a/Zend/zend_vm_execute.h b/Zend/zend_vm_execute.h index 9a23ad8a38..91980a2ad3 100644 --- a/Zend/zend_vm_execute.h +++ b/Zend/zend_vm_execute.h @@ -1955,7 +1955,6 @@ static int ZEND_INCLUDE_OR_EVAL_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS) if (inc_filename==&tmp_inc_filename) { zval_dtor(&tmp_inc_filename); } - EX_T(opline->result.u.var).var.ptr_ptr = &EX_T(opline->result.u.var).var.ptr; if (new_op_array) { zval *saved_object; @@ -2005,6 +2004,7 @@ static int ZEND_INCLUDE_OR_EVAL_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS) EX_T(opline->result.u.var).var.ptr->type = IS_BOOL; } } + EG(return_value_ptr_ptr) = original_return_value; ZEND_VM_NEXT_OPCODE(); } @@ -4468,7 +4468,6 @@ static int ZEND_INCLUDE_OR_EVAL_SPEC_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS) if (inc_filename==&tmp_inc_filename) { zval_dtor(&tmp_inc_filename); } - zval_dtor(free_op1.var); EX_T(opline->result.u.var).var.ptr_ptr = &EX_T(opline->result.u.var).var.ptr; if (new_op_array) { zval *saved_object; @@ -4518,6 +4517,7 @@ static int ZEND_INCLUDE_OR_EVAL_SPEC_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS) EX_T(opline->result.u.var).var.ptr->type = IS_BOOL; } } + zval_dtor(free_op1.var); EG(return_value_ptr_ptr) = original_return_value; ZEND_VM_NEXT_OPCODE(); } @@ -7606,7 +7606,6 @@ static int ZEND_INCLUDE_OR_EVAL_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS) if (inc_filename==&tmp_inc_filename) { zval_dtor(&tmp_inc_filename); } - if (free_op1.var) {zval_ptr_dtor(&free_op1.var);}; EX_T(opline->result.u.var).var.ptr_ptr = &EX_T(opline->result.u.var).var.ptr; if (new_op_array) { zval *saved_object; @@ -7656,6 +7655,7 @@ static int ZEND_INCLUDE_OR_EVAL_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS) EX_T(opline->result.u.var).var.ptr->type = IS_BOOL; } } + if (free_op1.var) {zval_ptr_dtor(&free_op1.var);}; EG(return_value_ptr_ptr) = original_return_value; ZEND_VM_NEXT_OPCODE(); } @@ -20371,7 +20371,6 @@ static int ZEND_INCLUDE_OR_EVAL_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS) if (inc_filename==&tmp_inc_filename) { zval_dtor(&tmp_inc_filename); } - EX_T(opline->result.u.var).var.ptr_ptr = &EX_T(opline->result.u.var).var.ptr; if (new_op_array) { zval *saved_object; @@ -20421,6 +20420,7 @@ static int ZEND_INCLUDE_OR_EVAL_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS) EX_T(opline->result.u.var).var.ptr->type = IS_BOOL; } } + EG(return_value_ptr_ptr) = original_return_value; ZEND_VM_NEXT_OPCODE(); }