From: Dmitry Stogov Date: Mon, 18 May 2015 09:44:40 +0000 (+0300) Subject: Fixed bug #69649 (segfault with --enable-dtrace) X-Git-Tag: PRE_PHP7_NSAPI_REMOVAL~42^2~55 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=cee88571d9dbb2d56b78b312919aea190580d9e5;p=php Fixed bug #69649 (segfault with --enable-dtrace) --- diff --git a/Zend/zend_vm_def.h b/Zend/zend_vm_def.h index c8626f185b..5d6b128cb3 100644 --- a/Zend/zend_vm_def.h +++ b/Zend/zend_vm_def.h @@ -2490,7 +2490,6 @@ ZEND_VM_HELPER(zend_leave_helper, ANY, ANY) } EG(current_execute_data) = EX(prev_execute_data); } - zend_vm_stack_free_call_frame_ex(call_info, execute_data); ZEND_VM_RETURN(); } @@ -5514,6 +5513,7 @@ ZEND_VM_HANDLER(73, ZEND_INCLUDE_OR_EVAL, CONST|TMPVAR|CV, ANY) } else { ZEND_ADD_CALL_FLAG(call, ZEND_CALL_TOP); zend_execute_ex(call); + zend_vm_stack_free_call_frame(call); } destroy_op_array(new_op_array); diff --git a/Zend/zend_vm_execute.h b/Zend/zend_vm_execute.h index 5ee528e759..e98f9dbf15 100644 --- a/Zend/zend_vm_execute.h +++ b/Zend/zend_vm_execute.h @@ -432,6 +432,7 @@ ZEND_API void zend_execute(zend_op_array *op_array, zval *return_value) EX(prev_execute_data) = EG(current_execute_data); i_init_execute_data(execute_data, op_array, return_value); zend_execute_ex(execute_data); + zend_vm_stack_free_call_frame(execute_data); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_leave_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS) @@ -529,7 +530,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_leave_helper_SPEC(ZEND_OPCODE_ } EG(current_execute_data) = EX(prev_execute_data); } - zend_vm_stack_free_call_frame_ex(call_info, execute_data); ZEND_VM_RETURN(); } @@ -3855,6 +3855,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INCLUDE_OR_EVAL_SPEC_CONST_HAN } else { ZEND_ADD_CALL_FLAG(call, ZEND_CALL_TOP); zend_execute_ex(call); + zend_vm_stack_free_call_frame(call); } destroy_op_array(new_op_array); @@ -29437,6 +29438,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INCLUDE_OR_EVAL_SPEC_CV_HANDLE } else { ZEND_ADD_CALL_FLAG(call, ZEND_CALL_TOP); zend_execute_ex(call); + zend_vm_stack_free_call_frame(call); } destroy_op_array(new_op_array); @@ -40927,6 +40929,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INCLUDE_OR_EVAL_SPEC_TMPVAR_HA } else { ZEND_ADD_CALL_FLAG(call, ZEND_CALL_TOP); zend_execute_ex(call); + zend_vm_stack_free_call_frame(call); } destroy_op_array(new_op_array); diff --git a/Zend/zend_vm_execute.skl b/Zend/zend_vm_execute.skl index 02fe6bdc36..7e223385ff 100644 --- a/Zend/zend_vm_execute.skl +++ b/Zend/zend_vm_execute.skl @@ -38,6 +38,7 @@ ZEND_API void zend_{%EXECUTOR_NAME%}(zend_op_array *op_array, zval *return_value EX(prev_execute_data) = EG(current_execute_data); i_init_execute_data(execute_data, op_array, return_value); zend_{%EXECUTOR_NAME%}_ex(execute_data); + zend_vm_stack_free_call_frame(execute_data); } {%EXTERNAL_EXECUTOR%}