From: Derick Rethans Date: Wed, 21 Sep 2005 08:13:43 +0000 (+0000) Subject: - MFH: Moved the FREE_OP to after the execution of the included file, or eval X-Git-Tag: php-5.1.0RC2~211 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=a51fc50b6eebf89b98879a1e8dd0a28a8e222201;p=php - MFH: 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 ac48686da4..3c16e3e7e5 100644 --- a/Zend/zend_vm_def.h +++ b/Zend/zend_vm_def.h @@ -2749,7 +2749,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; @@ -2799,6 +2798,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 2ef1b4ec64..6cae5f9998 100644 --- a/Zend/zend_vm_execute.h +++ b/Zend/zend_vm_execute.h @@ -1903,7 +1903,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; @@ -1953,6 +1952,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(); } @@ -4320,7 +4320,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; @@ -4370,6 +4369,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(); } @@ -7347,7 +7347,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; @@ -7397,6 +7396,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(); } @@ -19511,7 +19511,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; @@ -19561,6 +19560,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(); }