From: Dmitry Stogov Date: Tue, 8 Sep 2015 14:20:52 +0000 (+0300) Subject: Check EG(exception) only if it's really necessary X-Git-Tag: php-7.1.0alpha1~1215 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=bfab74d574ab8099b3e253a7720bdbc06efd4f7b;p=php Check EG(exception) only if it's really necessary --- diff --git a/Zend/zend_execute.c b/Zend/zend_execute.c index 67eabde9cb..8e20a12e09 100644 --- a/Zend/zend_execute.c +++ b/Zend/zend_execute.c @@ -692,7 +692,7 @@ static zend_bool zend_verify_scalar_type_hint(zend_uchar type_hint, zval *arg, z return zend_verify_weak_scalar_type_hint(type_hint, arg); } -static void zend_verify_internal_arg_type(zend_function *zf, uint32_t arg_num, zval *arg) +static int zend_verify_internal_arg_type(zend_function *zf, uint32_t arg_num, zval *arg) { zend_internal_arg_info *cur_arg_info; char *need_msg, *class_name; @@ -703,7 +703,7 @@ static void zend_verify_internal_arg_type(zend_function *zf, uint32_t arg_num, z } else if (zf->internal_function.fn_flags & ZEND_ACC_VARIADIC) { cur_arg_info = &zf->internal_function.arg_info[zf->internal_function.num_args]; } else { - return; + return 1; } if (cur_arg_info->type_hint) { @@ -713,24 +713,29 @@ static void zend_verify_internal_arg_type(zend_function *zf, uint32_t arg_num, z need_msg = zend_verify_internal_arg_class_kind((zend_internal_arg_info*)cur_arg_info, &class_name, &ce); if (!ce || !instanceof_function(Z_OBJCE_P(arg), ce)) { zend_verify_arg_error(zf, arg_num, need_msg, class_name, "instance of ", ZSTR_VAL(Z_OBJCE_P(arg)->name), arg); + return 0; } } } else if (Z_TYPE_P(arg) != IS_NULL || !cur_arg_info->allow_null) { if (cur_arg_info->class_name) { need_msg = zend_verify_internal_arg_class_kind((zend_internal_arg_info*)cur_arg_info, &class_name, &ce); zend_verify_arg_error(zf, arg_num, need_msg, class_name, zend_zval_type_name(arg), "", arg); + return 0; } else if (cur_arg_info->type_hint == IS_CALLABLE) { if (!zend_is_callable(arg, IS_CALLABLE_CHECK_SILENT, NULL)) { zend_verify_arg_error(zf, arg_num, "be callable", "", zend_zval_type_name(arg), "", arg); + return 0; } } else if (cur_arg_info->type_hint == _IS_BOOL && EXPECTED(Z_TYPE_P(arg) == IS_FALSE || Z_TYPE_P(arg) == IS_TRUE)) { /* pass */ } else if (UNEXPECTED(!zend_verify_scalar_type_hint(cur_arg_info->type_hint, arg, ZEND_CALL_USES_STRICT_TYPES(EG(current_execute_data))))) { zend_verify_arg_error(zf, arg_num, "be of the type ", zend_get_type_by_const(cur_arg_info->type_hint), zend_zval_type_name(arg), "", arg); + return 0; } } } + return 1; } static zend_always_inline int zend_verify_arg_type(zend_function *zf, uint32_t arg_num, zval *arg, zval *default_value, void **cache_slot) diff --git a/Zend/zend_vm_def.h b/Zend/zend_vm_def.h index 3f693b61c9..581f9c74cf 100644 --- a/Zend/zend_vm_def.h +++ b/Zend/zend_vm_def.h @@ -2843,9 +2843,9 @@ ZEND_VM_C_LABEL(try_class_name): } else { if (OP2_TYPE == IS_CV && UNEXPECTED(Z_TYPE_P(class_name) == IS_UNDEF)) { GET_OP2_UNDEF_CV(class_name, BP_VAR_R); - } - if (UNEXPECTED(EG(exception) != NULL)) { - HANDLE_EXCEPTION(); + if (UNEXPECTED(EG(exception) != NULL)) { + HANDLE_EXCEPTION(); + } } zend_throw_error(NULL, "Class name must be a valid object or a string"); } @@ -2879,12 +2879,11 @@ ZEND_VM_HANDLER(112, ZEND_INIT_METHOD_CALL, CONST|TMPVAR|UNUSED|CV, CONST|TMPVAR if (EXPECTED(Z_TYPE_P(function_name) == IS_STRING)) { break; } - } - if (OP2_TYPE == IS_CV && UNEXPECTED(Z_TYPE_P(function_name) == IS_UNDEF)) { + } else if (OP2_TYPE == IS_CV && UNEXPECTED(Z_TYPE_P(function_name) == IS_UNDEF)) { GET_OP2_UNDEF_CV(function_name, BP_VAR_R); - } - if (UNEXPECTED(EG(exception) != NULL)) { - HANDLE_EXCEPTION(); + if (UNEXPECTED(EG(exception) != NULL)) { + HANDLE_EXCEPTION(); + } } zend_throw_error(NULL, "Method name must be a string"); FREE_OP2(); @@ -2912,9 +2911,10 @@ ZEND_VM_HANDLER(112, ZEND_INIT_METHOD_CALL, CONST|TMPVAR|UNUSED|CV, CONST|TMPVAR } if (OP1_TYPE == IS_CV && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) { GET_OP1_UNDEF_CV(object, BP_VAR_R); - } - if (UNEXPECTED(EG(exception) != NULL)) { - HANDLE_EXCEPTION(); + if (UNEXPECTED(EG(exception) != NULL)) { + FREE_OP2(); + HANDLE_EXCEPTION(); + } } zend_throw_error(NULL, "Call to a member function %s() on %s", Z_STRVAL_P(function_name), zend_get_type_by_const(Z_TYPE_P(object))); FREE_OP2(); @@ -2992,10 +2992,10 @@ ZEND_VM_HANDLER(113, ZEND_INIT_STATIC_METHOD_CALL, CONST|VAR, CONST|TMPVAR|UNUSE ce = CACHED_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op1))); if (UNEXPECTED(ce == NULL)) { ce = zend_fetch_class_by_name(Z_STR_P(EX_CONSTANT(opline->op1)), EX_CONSTANT(opline->op1) + 1, ZEND_FETCH_CLASS_DEFAULT | ZEND_FETCH_CLASS_EXCEPTION); - if (UNEXPECTED(EG(exception) != NULL)) { - HANDLE_EXCEPTION(); - } if (UNEXPECTED(ce == NULL)) { + if (UNEXPECTED(EG(exception) != NULL)) { + HANDLE_EXCEPTION(); + } zend_throw_error(NULL, "Class '%s' not found", Z_STRVAL_P(EX_CONSTANT(opline->op1))); HANDLE_EXCEPTION(); } @@ -3021,9 +3021,9 @@ ZEND_VM_HANDLER(113, ZEND_INIT_STATIC_METHOD_CALL, CONST|VAR, CONST|TMPVAR|UNUSE if (UNEXPECTED(Z_TYPE_P(function_name) != IS_STRING)) { if (OP2_TYPE == IS_CV && UNEXPECTED(Z_TYPE_P(function_name) == IS_UNDEF)) { GET_OP2_UNDEF_CV(function_name, BP_VAR_R); - } - if (UNEXPECTED(EG(exception) != NULL)) { - HANDLE_EXCEPTION(); + if (UNEXPECTED(EG(exception) != NULL)) { + HANDLE_EXCEPTION(); + } } zend_throw_error(NULL, "Function name must be a string"); FREE_OP2(); @@ -3334,9 +3334,9 @@ ZEND_VM_C_LABEL(try_function_name): } else { if (OP2_TYPE == IS_CV && UNEXPECTED(Z_TYPE_P(function_name) == IS_UNDEF)) { GET_OP2_UNDEF_CV(function_name, BP_VAR_R); - } - if (UNEXPECTED(EG(exception) != NULL)) { - HANDLE_EXCEPTION(); + if (UNEXPECTED(EG(exception) != NULL)) { + HANDLE_EXCEPTION(); + } } zend_throw_error(NULL, "Function name must be a string"); FREE_OP2(); @@ -3602,16 +3602,15 @@ ZEND_VM_HANDLER(131, ZEND_DO_FCALL_BY_NAME, ANY, ANY) zval *p = ZEND_CALL_ARG(call, 1); for (i = 0; i < num_args; ++i) { - zend_verify_internal_arg_type(fbc, i + 1, p); + if (UNEXPECTED(!zend_verify_internal_arg_type(fbc, i + 1, p))) { + EG(current_execute_data) = call->prev_execute_data; + zend_vm_stack_free_args(call); + zend_vm_stack_free_call_frame(call); + zend_throw_exception_internal(NULL); + HANDLE_EXCEPTION(); + } p++; } - if (UNEXPECTED(EG(exception) != NULL)) { - EG(current_execute_data) = call->prev_execute_data; - zend_vm_stack_free_args(call); - zend_vm_stack_free_call_frame(call); - zend_throw_exception_internal(NULL); - HANDLE_EXCEPTION(); - } } ret = EX_VAR(opline->result.var); @@ -3724,8 +3723,7 @@ ZEND_VM_HANDLER(60, ZEND_DO_FCALL, ANY, ANY) zval *p = ZEND_CALL_ARG(call, 1); for (i = 0; i < num_args; ++i) { - zend_verify_internal_arg_type(fbc, i + 1, p); - if (UNEXPECTED(EG(exception) != NULL)) { + if (UNEXPECTED(!zend_verify_internal_arg_type(fbc, i + 1, p))) { EG(current_execute_data) = call->prev_execute_data; zend_vm_stack_free_args(call); if (RETURN_VALUE_USED(opline)) { @@ -4076,9 +4074,9 @@ ZEND_VM_HANDLER(108, ZEND_THROW, CONST|TMP|VAR|CV, ANY) } if (OP1_TYPE == IS_CV && UNEXPECTED(Z_TYPE_P(value) == IS_UNDEF)) { GET_OP1_UNDEF_CV(value, BP_VAR_R); - } - if (UNEXPECTED(EG(exception) != NULL)) { - HANDLE_EXCEPTION(); + if (UNEXPECTED(EG(exception) != NULL)) { + HANDLE_EXCEPTION(); + } } zend_throw_error(NULL, "Can only throw objects"); FREE_OP1(); @@ -4942,9 +4940,9 @@ ZEND_VM_HANDLER(110, ZEND_CLONE, CONST|TMPVAR|UNUSED|CV, ANY) } if (OP1_TYPE == IS_CV && UNEXPECTED(Z_TYPE_P(obj) == IS_UNDEF)) { GET_OP1_UNDEF_CV(obj, BP_VAR_R); - } - if (UNEXPECTED(EG(exception) != NULL)) { - HANDLE_EXCEPTION(); + if (UNEXPECTED(EG(exception) != NULL)) { + HANDLE_EXCEPTION(); + } } zend_throw_error(NULL, "__clone method called on non-object"); FREE_OP1(); @@ -5053,11 +5051,10 @@ ZEND_VM_HANDLER(99, ZEND_FETCH_CONSTANT, VAR|CONST|UNUSED, CONST) ce = CACHED_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op1))); } else { ce = zend_fetch_class_by_name(Z_STR_P(EX_CONSTANT(opline->op1)), EX_CONSTANT(opline->op1) + 1, ZEND_FETCH_CLASS_DEFAULT | ZEND_FETCH_CLASS_EXCEPTION); - if (UNEXPECTED(EG(exception) != NULL)) { - HANDLE_EXCEPTION(); - } if (UNEXPECTED(ce == NULL)) { - zend_throw_error(NULL, "Class '%s' not found", Z_STRVAL_P(EX_CONSTANT(opline->op1))); + if (EXPECTED(!EG(exception))) { + zend_throw_error(NULL, "Class '%s' not found", Z_STRVAL_P(EX_CONSTANT(opline->op1))); + } HANDLE_EXCEPTION(); } CACHE_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op1)), ce); @@ -5511,20 +5508,16 @@ ZEND_VM_HANDLER(74, ZEND_UNSET_VAR, CONST|TMPVAR|CV, UNUSED|CONST|VAR) ce = CACHED_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op2))); if (UNEXPECTED(ce == NULL)) { ce = zend_fetch_class_by_name(Z_STR_P(EX_CONSTANT(opline->op2)), EX_CONSTANT(opline->op2) + 1, ZEND_FETCH_CLASS_DEFAULT | ZEND_FETCH_CLASS_EXCEPTION); - if (UNEXPECTED(EG(exception) != NULL)) { + if (UNEXPECTED(ce == NULL)) { + if (EXPECTED(!EG(exception))) { + zend_throw_error(NULL, "Class '%s' not found", Z_STRVAL_P(EX_CONSTANT(opline->op2))); + } if (OP1_TYPE != IS_CONST && Z_TYPE(tmp) != IS_UNDEF) { zend_string_release(Z_STR(tmp)); } FREE_OP1(); HANDLE_EXCEPTION(); } - if (UNEXPECTED(ce == NULL)) { - zend_throw_error(NULL, "Class '%s' not found", Z_STRVAL_P(EX_CONSTANT(opline->op2))); - if (OP1_TYPE != IS_CONST) { - zend_string_release(Z_STR(tmp)); - } - HANDLE_EXCEPTION(); - } CACHE_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op2)), ce); } } else { @@ -7873,8 +7866,7 @@ ZEND_VM_HANDLER(158, ZEND_CALL_TRAMPOLINE, ANY, ANY) EG(current_execute_data) = call; for (i = 0; i < num_args; ++i) { - zend_verify_internal_arg_type(fbc, i + 1, p); - if (UNEXPECTED(EG(exception) != NULL)) { + if (UNEXPECTED(!zend_verify_internal_arg_type(fbc, i + 1, p))) { EG(current_execute_data) = call->prev_execute_data; zend_vm_stack_free_args(call); zend_vm_stack_free_call_frame(call); diff --git a/Zend/zend_vm_execute.h b/Zend/zend_vm_execute.h index 94cc16fee8..21e726ae5d 100644 --- a/Zend/zend_vm_execute.h +++ b/Zend/zend_vm_execute.h @@ -687,16 +687,15 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_DO_FCALL_BY_NAME_SPEC_HANDLER( zval *p = ZEND_CALL_ARG(call, 1); for (i = 0; i < num_args; ++i) { - zend_verify_internal_arg_type(fbc, i + 1, p); + if (UNEXPECTED(!zend_verify_internal_arg_type(fbc, i + 1, p))) { + EG(current_execute_data) = call->prev_execute_data; + zend_vm_stack_free_args(call); + zend_vm_stack_free_call_frame(call); + zend_throw_exception_internal(NULL); + HANDLE_EXCEPTION(); + } p++; } - if (UNEXPECTED(EG(exception) != NULL)) { - EG(current_execute_data) = call->prev_execute_data; - zend_vm_stack_free_args(call); - zend_vm_stack_free_call_frame(call); - zend_throw_exception_internal(NULL); - HANDLE_EXCEPTION(); - } } ret = EX_VAR(opline->result.var); @@ -809,8 +808,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_DO_FCALL_SPEC_HANDLER(ZEND_OPC zval *p = ZEND_CALL_ARG(call, 1); for (i = 0; i < num_args; ++i) { - zend_verify_internal_arg_type(fbc, i + 1, p); - if (UNEXPECTED(EG(exception) != NULL)) { + if (UNEXPECTED(!zend_verify_internal_arg_type(fbc, i + 1, p))) { EG(current_execute_data) = call->prev_execute_data; zend_vm_stack_free_args(call); if (RETURN_VALUE_USED(opline)) { @@ -1776,8 +1774,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_CALL_TRAMPOLINE_SPEC_HANDLER(Z EG(current_execute_data) = call; for (i = 0; i < num_args; ++i) { - zend_verify_internal_arg_type(fbc, i + 1, p); - if (UNEXPECTED(EG(exception) != NULL)) { + if (UNEXPECTED(!zend_verify_internal_arg_type(fbc, i + 1, p))) { EG(current_execute_data) = call->prev_execute_data; zend_vm_stack_free_args(call); zend_vm_stack_free_call_frame(call); @@ -1878,9 +1875,9 @@ try_class_name: } else { if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(class_name) == IS_UNDEF)) { GET_OP2_UNDEF_CV(class_name, BP_VAR_R); - } - if (UNEXPECTED(EG(exception) != NULL)) { - HANDLE_EXCEPTION(); + if (UNEXPECTED(EG(exception) != NULL)) { + HANDLE_EXCEPTION(); + } } zend_throw_error(NULL, "Class name must be a valid object or a string"); } @@ -2113,9 +2110,9 @@ try_function_name: } else { if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(function_name) == IS_UNDEF)) { GET_OP2_UNDEF_CV(function_name, BP_VAR_R); - } - if (UNEXPECTED(EG(exception) != NULL)) { - HANDLE_EXCEPTION(); + if (UNEXPECTED(EG(exception) != NULL)) { + HANDLE_EXCEPTION(); + } } zend_throw_error(NULL, "Function name must be a string"); @@ -2286,9 +2283,9 @@ try_class_name: } else { if (IS_UNUSED == IS_CV && UNEXPECTED(Z_TYPE_P(class_name) == IS_UNDEF)) { GET_OP2_UNDEF_CV(class_name, BP_VAR_R); - } - if (UNEXPECTED(EG(exception) != NULL)) { - HANDLE_EXCEPTION(); + if (UNEXPECTED(EG(exception) != NULL)) { + HANDLE_EXCEPTION(); + } } zend_throw_error(NULL, "Class name must be a valid object or a string"); } @@ -2328,9 +2325,9 @@ try_class_name: } else { if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(class_name) == IS_UNDEF)) { GET_OP2_UNDEF_CV(class_name, BP_VAR_R); - } - if (UNEXPECTED(EG(exception) != NULL)) { - HANDLE_EXCEPTION(); + if (UNEXPECTED(EG(exception) != NULL)) { + HANDLE_EXCEPTION(); + } } zend_throw_error(NULL, "Class name must be a valid object or a string"); } @@ -2536,9 +2533,9 @@ try_function_name: } else { if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(function_name) == IS_UNDEF)) { GET_OP2_UNDEF_CV(function_name, BP_VAR_R); - } - if (UNEXPECTED(EG(exception) != NULL)) { - HANDLE_EXCEPTION(); + if (UNEXPECTED(EG(exception) != NULL)) { + HANDLE_EXCEPTION(); + } } zend_throw_error(NULL, "Function name must be a string"); @@ -2583,9 +2580,9 @@ try_class_name: } else { if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(class_name) == IS_UNDEF)) { GET_OP2_UNDEF_CV(class_name, BP_VAR_R); - } - if (UNEXPECTED(EG(exception) != NULL)) { - HANDLE_EXCEPTION(); + if (UNEXPECTED(EG(exception) != NULL)) { + HANDLE_EXCEPTION(); + } } zend_throw_error(NULL, "Class name must be a valid object or a string"); } @@ -2792,9 +2789,9 @@ try_function_name: } else { if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(function_name) == IS_UNDEF)) { GET_OP2_UNDEF_CV(function_name, BP_VAR_R); - } - if (UNEXPECTED(EG(exception) != NULL)) { - HANDLE_EXCEPTION(); + if (UNEXPECTED(EG(exception) != NULL)) { + HANDLE_EXCEPTION(); + } } zend_throw_error(NULL, "Function name must be a string"); zval_ptr_dtor_nogc(free_op2); @@ -3238,9 +3235,9 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_THROW_SPEC_CONST_HANDLER(ZEND_ } if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(value) == IS_UNDEF)) { GET_OP1_UNDEF_CV(value, BP_VAR_R); - } - if (UNEXPECTED(EG(exception) != NULL)) { - HANDLE_EXCEPTION(); + if (UNEXPECTED(EG(exception) != NULL)) { + HANDLE_EXCEPTION(); + } } zend_throw_error(NULL, "Can only throw objects"); @@ -3411,9 +3408,9 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_CLONE_SPEC_CONST_HANDLER(ZEND_ } if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(obj) == IS_UNDEF)) { GET_OP1_UNDEF_CV(obj, BP_VAR_R); - } - if (UNEXPECTED(EG(exception) != NULL)) { - HANDLE_EXCEPTION(); + if (UNEXPECTED(EG(exception) != NULL)) { + HANDLE_EXCEPTION(); + } } zend_throw_error(NULL, "__clone method called on non-object"); @@ -5483,12 +5480,11 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_METHOD_CALL_SPEC_CONST_CO if (EXPECTED(Z_TYPE_P(function_name) == IS_STRING)) { break; } - } - if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(function_name) == IS_UNDEF)) { + } else if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(function_name) == IS_UNDEF)) { GET_OP2_UNDEF_CV(function_name, BP_VAR_R); - } - if (UNEXPECTED(EG(exception) != NULL)) { - HANDLE_EXCEPTION(); + if (UNEXPECTED(EG(exception) != NULL)) { + HANDLE_EXCEPTION(); + } } zend_throw_error(NULL, "Method name must be a string"); @@ -5516,9 +5512,10 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_METHOD_CALL_SPEC_CONST_CO } if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) { GET_OP1_UNDEF_CV(object, BP_VAR_R); - } - if (UNEXPECTED(EG(exception) != NULL)) { - HANDLE_EXCEPTION(); + if (UNEXPECTED(EG(exception) != NULL)) { + + HANDLE_EXCEPTION(); + } } zend_throw_error(NULL, "Call to a member function %s() on %s", Z_STRVAL_P(function_name), zend_get_type_by_const(Z_TYPE_P(object))); @@ -5594,10 +5591,10 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_STATIC_METHOD_CALL_SPEC_C ce = CACHED_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op1))); if (UNEXPECTED(ce == NULL)) { ce = zend_fetch_class_by_name(Z_STR_P(EX_CONSTANT(opline->op1)), EX_CONSTANT(opline->op1) + 1, ZEND_FETCH_CLASS_DEFAULT | ZEND_FETCH_CLASS_EXCEPTION); - if (UNEXPECTED(EG(exception) != NULL)) { - HANDLE_EXCEPTION(); - } if (UNEXPECTED(ce == NULL)) { + if (UNEXPECTED(EG(exception) != NULL)) { + HANDLE_EXCEPTION(); + } zend_throw_error(NULL, "Class '%s' not found", Z_STRVAL_P(EX_CONSTANT(opline->op1))); HANDLE_EXCEPTION(); } @@ -5623,9 +5620,9 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_STATIC_METHOD_CALL_SPEC_C if (UNEXPECTED(Z_TYPE_P(function_name) != IS_STRING)) { if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(function_name) == IS_UNDEF)) { GET_OP2_UNDEF_CV(function_name, BP_VAR_R); - } - if (UNEXPECTED(EG(exception) != NULL)) { - HANDLE_EXCEPTION(); + if (UNEXPECTED(EG(exception) != NULL)) { + HANDLE_EXCEPTION(); + } } zend_throw_error(NULL, "Function name must be a string"); @@ -5894,11 +5891,10 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_CONSTANT_SPEC_CONST_CONS ce = CACHED_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op1))); } else { ce = zend_fetch_class_by_name(Z_STR_P(EX_CONSTANT(opline->op1)), EX_CONSTANT(opline->op1) + 1, ZEND_FETCH_CLASS_DEFAULT | ZEND_FETCH_CLASS_EXCEPTION); - if (UNEXPECTED(EG(exception) != NULL)) { - HANDLE_EXCEPTION(); - } if (UNEXPECTED(ce == NULL)) { - zend_throw_error(NULL, "Class '%s' not found", Z_STRVAL_P(EX_CONSTANT(opline->op1))); + if (EXPECTED(!EG(exception))) { + zend_throw_error(NULL, "Class '%s' not found", Z_STRVAL_P(EX_CONSTANT(opline->op1))); + } HANDLE_EXCEPTION(); } CACHE_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op1)), ce); @@ -6121,20 +6117,16 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_UNSET_VAR_SPEC_CONST_CONST_HAN ce = CACHED_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op2))); if (UNEXPECTED(ce == NULL)) { ce = zend_fetch_class_by_name(Z_STR_P(EX_CONSTANT(opline->op2)), EX_CONSTANT(opline->op2) + 1, ZEND_FETCH_CLASS_DEFAULT | ZEND_FETCH_CLASS_EXCEPTION); - if (UNEXPECTED(EG(exception) != NULL)) { + if (UNEXPECTED(ce == NULL)) { + if (EXPECTED(!EG(exception))) { + zend_throw_error(NULL, "Class '%s' not found", Z_STRVAL_P(EX_CONSTANT(opline->op2))); + } if (IS_CONST != IS_CONST && Z_TYPE(tmp) != IS_UNDEF) { zend_string_release(Z_STR(tmp)); } HANDLE_EXCEPTION(); } - if (UNEXPECTED(ce == NULL)) { - zend_throw_error(NULL, "Class '%s' not found", Z_STRVAL_P(EX_CONSTANT(opline->op2))); - if (IS_CONST != IS_CONST) { - zend_string_release(Z_STR(tmp)); - } - HANDLE_EXCEPTION(); - } CACHE_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op2)), ce); } } else { @@ -7080,20 +7072,16 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_UNSET_VAR_SPEC_CONST_VAR_HANDL ce = CACHED_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op2))); if (UNEXPECTED(ce == NULL)) { ce = zend_fetch_class_by_name(Z_STR_P(EX_CONSTANT(opline->op2)), EX_CONSTANT(opline->op2) + 1, ZEND_FETCH_CLASS_DEFAULT | ZEND_FETCH_CLASS_EXCEPTION); - if (UNEXPECTED(EG(exception) != NULL)) { + if (UNEXPECTED(ce == NULL)) { + if (EXPECTED(!EG(exception))) { + zend_throw_error(NULL, "Class '%s' not found", Z_STRVAL_P(EX_CONSTANT(opline->op2))); + } if (IS_CONST != IS_CONST && Z_TYPE(tmp) != IS_UNDEF) { zend_string_release(Z_STR(tmp)); } HANDLE_EXCEPTION(); } - if (UNEXPECTED(ce == NULL)) { - zend_throw_error(NULL, "Class '%s' not found", Z_STRVAL_P(EX_CONSTANT(opline->op2))); - if (IS_CONST != IS_CONST) { - zend_string_release(Z_STR(tmp)); - } - HANDLE_EXCEPTION(); - } CACHE_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op2)), ce); } } else { @@ -7591,10 +7579,10 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_STATIC_METHOD_CALL_SPEC_C ce = CACHED_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op1))); if (UNEXPECTED(ce == NULL)) { ce = zend_fetch_class_by_name(Z_STR_P(EX_CONSTANT(opline->op1)), EX_CONSTANT(opline->op1) + 1, ZEND_FETCH_CLASS_DEFAULT | ZEND_FETCH_CLASS_EXCEPTION); - if (UNEXPECTED(EG(exception) != NULL)) { - HANDLE_EXCEPTION(); - } if (UNEXPECTED(ce == NULL)) { + if (UNEXPECTED(EG(exception) != NULL)) { + HANDLE_EXCEPTION(); + } zend_throw_error(NULL, "Class '%s' not found", Z_STRVAL_P(EX_CONSTANT(opline->op1))); HANDLE_EXCEPTION(); } @@ -7620,9 +7608,9 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_STATIC_METHOD_CALL_SPEC_C if (UNEXPECTED(Z_TYPE_P(function_name) != IS_STRING)) { if (IS_UNUSED == IS_CV && UNEXPECTED(Z_TYPE_P(function_name) == IS_UNDEF)) { GET_OP2_UNDEF_CV(function_name, BP_VAR_R); - } - if (UNEXPECTED(EG(exception) != NULL)) { - HANDLE_EXCEPTION(); + if (UNEXPECTED(EG(exception) != NULL)) { + HANDLE_EXCEPTION(); + } } zend_throw_error(NULL, "Function name must be a string"); @@ -7939,20 +7927,16 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_UNSET_VAR_SPEC_CONST_UNUSED_HA ce = CACHED_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op2))); if (UNEXPECTED(ce == NULL)) { ce = zend_fetch_class_by_name(Z_STR_P(EX_CONSTANT(opline->op2)), EX_CONSTANT(opline->op2) + 1, ZEND_FETCH_CLASS_DEFAULT | ZEND_FETCH_CLASS_EXCEPTION); - if (UNEXPECTED(EG(exception) != NULL)) { + if (UNEXPECTED(ce == NULL)) { + if (EXPECTED(!EG(exception))) { + zend_throw_error(NULL, "Class '%s' not found", Z_STRVAL_P(EX_CONSTANT(opline->op2))); + } if (IS_CONST != IS_CONST && Z_TYPE(tmp) != IS_UNDEF) { zend_string_release(Z_STR(tmp)); } HANDLE_EXCEPTION(); } - if (UNEXPECTED(ce == NULL)) { - zend_throw_error(NULL, "Class '%s' not found", Z_STRVAL_P(EX_CONSTANT(opline->op2))); - if (IS_CONST != IS_CONST) { - zend_string_release(Z_STR(tmp)); - } - HANDLE_EXCEPTION(); - } CACHE_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op2)), ce); } } else { @@ -9208,12 +9192,11 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_METHOD_CALL_SPEC_CONST_CV if (EXPECTED(Z_TYPE_P(function_name) == IS_STRING)) { break; } - } - if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(function_name) == IS_UNDEF)) { + } else if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(function_name) == IS_UNDEF)) { GET_OP2_UNDEF_CV(function_name, BP_VAR_R); - } - if (UNEXPECTED(EG(exception) != NULL)) { - HANDLE_EXCEPTION(); + if (UNEXPECTED(EG(exception) != NULL)) { + HANDLE_EXCEPTION(); + } } zend_throw_error(NULL, "Method name must be a string"); @@ -9241,9 +9224,10 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_METHOD_CALL_SPEC_CONST_CV } if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) { GET_OP1_UNDEF_CV(object, BP_VAR_R); - } - if (UNEXPECTED(EG(exception) != NULL)) { - HANDLE_EXCEPTION(); + if (UNEXPECTED(EG(exception) != NULL)) { + + HANDLE_EXCEPTION(); + } } zend_throw_error(NULL, "Call to a member function %s() on %s", Z_STRVAL_P(function_name), zend_get_type_by_const(Z_TYPE_P(object))); @@ -9319,10 +9303,10 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_STATIC_METHOD_CALL_SPEC_C ce = CACHED_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op1))); if (UNEXPECTED(ce == NULL)) { ce = zend_fetch_class_by_name(Z_STR_P(EX_CONSTANT(opline->op1)), EX_CONSTANT(opline->op1) + 1, ZEND_FETCH_CLASS_DEFAULT | ZEND_FETCH_CLASS_EXCEPTION); - if (UNEXPECTED(EG(exception) != NULL)) { - HANDLE_EXCEPTION(); - } if (UNEXPECTED(ce == NULL)) { + if (UNEXPECTED(EG(exception) != NULL)) { + HANDLE_EXCEPTION(); + } zend_throw_error(NULL, "Class '%s' not found", Z_STRVAL_P(EX_CONSTANT(opline->op1))); HANDLE_EXCEPTION(); } @@ -9348,9 +9332,9 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_STATIC_METHOD_CALL_SPEC_C if (UNEXPECTED(Z_TYPE_P(function_name) != IS_STRING)) { if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(function_name) == IS_UNDEF)) { GET_OP2_UNDEF_CV(function_name, BP_VAR_R); - } - if (UNEXPECTED(EG(exception) != NULL)) { - HANDLE_EXCEPTION(); + if (UNEXPECTED(EG(exception) != NULL)) { + HANDLE_EXCEPTION(); + } } zend_throw_error(NULL, "Function name must be a string"); @@ -11015,12 +10999,11 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_METHOD_CALL_SPEC_CONST_TM if (EXPECTED(Z_TYPE_P(function_name) == IS_STRING)) { break; } - } - if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(function_name) == IS_UNDEF)) { + } else if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(function_name) == IS_UNDEF)) { GET_OP2_UNDEF_CV(function_name, BP_VAR_R); - } - if (UNEXPECTED(EG(exception) != NULL)) { - HANDLE_EXCEPTION(); + if (UNEXPECTED(EG(exception) != NULL)) { + HANDLE_EXCEPTION(); + } } zend_throw_error(NULL, "Method name must be a string"); zval_ptr_dtor_nogc(free_op2); @@ -11048,9 +11031,10 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_METHOD_CALL_SPEC_CONST_TM } if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) { GET_OP1_UNDEF_CV(object, BP_VAR_R); - } - if (UNEXPECTED(EG(exception) != NULL)) { - HANDLE_EXCEPTION(); + if (UNEXPECTED(EG(exception) != NULL)) { + zval_ptr_dtor_nogc(free_op2); + HANDLE_EXCEPTION(); + } } zend_throw_error(NULL, "Call to a member function %s() on %s", Z_STRVAL_P(function_name), zend_get_type_by_const(Z_TYPE_P(object))); zval_ptr_dtor_nogc(free_op2); @@ -11127,10 +11111,10 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_STATIC_METHOD_CALL_SPEC_C ce = CACHED_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op1))); if (UNEXPECTED(ce == NULL)) { ce = zend_fetch_class_by_name(Z_STR_P(EX_CONSTANT(opline->op1)), EX_CONSTANT(opline->op1) + 1, ZEND_FETCH_CLASS_DEFAULT | ZEND_FETCH_CLASS_EXCEPTION); - if (UNEXPECTED(EG(exception) != NULL)) { - HANDLE_EXCEPTION(); - } if (UNEXPECTED(ce == NULL)) { + if (UNEXPECTED(EG(exception) != NULL)) { + HANDLE_EXCEPTION(); + } zend_throw_error(NULL, "Class '%s' not found", Z_STRVAL_P(EX_CONSTANT(opline->op1))); HANDLE_EXCEPTION(); } @@ -11156,9 +11140,9 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_STATIC_METHOD_CALL_SPEC_C if (UNEXPECTED(Z_TYPE_P(function_name) != IS_STRING)) { if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(function_name) == IS_UNDEF)) { GET_OP2_UNDEF_CV(function_name, BP_VAR_R); - } - if (UNEXPECTED(EG(exception) != NULL)) { - HANDLE_EXCEPTION(); + if (UNEXPECTED(EG(exception) != NULL)) { + HANDLE_EXCEPTION(); + } } zend_throw_error(NULL, "Function name must be a string"); zval_ptr_dtor_nogc(free_op2); @@ -11874,9 +11858,9 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_THROW_SPEC_TMP_HANDLER(ZEND_OP } if (IS_TMP_VAR == IS_CV && UNEXPECTED(Z_TYPE_P(value) == IS_UNDEF)) { GET_OP1_UNDEF_CV(value, BP_VAR_R); - } - if (UNEXPECTED(EG(exception) != NULL)) { - HANDLE_EXCEPTION(); + if (UNEXPECTED(EG(exception) != NULL)) { + HANDLE_EXCEPTION(); + } } zend_throw_error(NULL, "Can only throw objects"); zval_ptr_dtor_nogc(free_op1); @@ -15116,9 +15100,9 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_THROW_SPEC_VAR_HANDLER(ZEND_OP } if (IS_VAR == IS_CV && UNEXPECTED(Z_TYPE_P(value) == IS_UNDEF)) { GET_OP1_UNDEF_CV(value, BP_VAR_R); - } - if (UNEXPECTED(EG(exception) != NULL)) { - HANDLE_EXCEPTION(); + if (UNEXPECTED(EG(exception) != NULL)) { + HANDLE_EXCEPTION(); + } } zend_throw_error(NULL, "Can only throw objects"); zval_ptr_dtor_nogc(free_op1); @@ -17473,10 +17457,10 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_STATIC_METHOD_CALL_SPEC_V ce = CACHED_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op1))); if (UNEXPECTED(ce == NULL)) { ce = zend_fetch_class_by_name(Z_STR_P(EX_CONSTANT(opline->op1)), EX_CONSTANT(opline->op1) + 1, ZEND_FETCH_CLASS_DEFAULT | ZEND_FETCH_CLASS_EXCEPTION); - if (UNEXPECTED(EG(exception) != NULL)) { - HANDLE_EXCEPTION(); - } if (UNEXPECTED(ce == NULL)) { + if (UNEXPECTED(EG(exception) != NULL)) { + HANDLE_EXCEPTION(); + } zend_throw_error(NULL, "Class '%s' not found", Z_STRVAL_P(EX_CONSTANT(opline->op1))); HANDLE_EXCEPTION(); } @@ -17502,9 +17486,9 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_STATIC_METHOD_CALL_SPEC_V if (UNEXPECTED(Z_TYPE_P(function_name) != IS_STRING)) { if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(function_name) == IS_UNDEF)) { GET_OP2_UNDEF_CV(function_name, BP_VAR_R); - } - if (UNEXPECTED(EG(exception) != NULL)) { - HANDLE_EXCEPTION(); + if (UNEXPECTED(EG(exception) != NULL)) { + HANDLE_EXCEPTION(); + } } zend_throw_error(NULL, "Function name must be a string"); @@ -17649,11 +17633,10 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_CONSTANT_SPEC_VAR_CONST_ ce = CACHED_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op1))); } else { ce = zend_fetch_class_by_name(Z_STR_P(EX_CONSTANT(opline->op1)), EX_CONSTANT(opline->op1) + 1, ZEND_FETCH_CLASS_DEFAULT | ZEND_FETCH_CLASS_EXCEPTION); - if (UNEXPECTED(EG(exception) != NULL)) { - HANDLE_EXCEPTION(); - } if (UNEXPECTED(ce == NULL)) { - zend_throw_error(NULL, "Class '%s' not found", Z_STRVAL_P(EX_CONSTANT(opline->op1))); + if (EXPECTED(!EG(exception))) { + zend_throw_error(NULL, "Class '%s' not found", Z_STRVAL_P(EX_CONSTANT(opline->op1))); + } HANDLE_EXCEPTION(); } CACHE_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op1)), ce); @@ -19099,10 +19082,10 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_STATIC_METHOD_CALL_SPEC_V ce = CACHED_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op1))); if (UNEXPECTED(ce == NULL)) { ce = zend_fetch_class_by_name(Z_STR_P(EX_CONSTANT(opline->op1)), EX_CONSTANT(opline->op1) + 1, ZEND_FETCH_CLASS_DEFAULT | ZEND_FETCH_CLASS_EXCEPTION); - if (UNEXPECTED(EG(exception) != NULL)) { - HANDLE_EXCEPTION(); - } if (UNEXPECTED(ce == NULL)) { + if (UNEXPECTED(EG(exception) != NULL)) { + HANDLE_EXCEPTION(); + } zend_throw_error(NULL, "Class '%s' not found", Z_STRVAL_P(EX_CONSTANT(opline->op1))); HANDLE_EXCEPTION(); } @@ -19128,9 +19111,9 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_STATIC_METHOD_CALL_SPEC_V if (UNEXPECTED(Z_TYPE_P(function_name) != IS_STRING)) { if (IS_UNUSED == IS_CV && UNEXPECTED(Z_TYPE_P(function_name) == IS_UNDEF)) { GET_OP2_UNDEF_CV(function_name, BP_VAR_R); - } - if (UNEXPECTED(EG(exception) != NULL)) { - HANDLE_EXCEPTION(); + if (UNEXPECTED(EG(exception) != NULL)) { + HANDLE_EXCEPTION(); + } } zend_throw_error(NULL, "Function name must be a string"); @@ -20702,10 +20685,10 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_STATIC_METHOD_CALL_SPEC_V ce = CACHED_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op1))); if (UNEXPECTED(ce == NULL)) { ce = zend_fetch_class_by_name(Z_STR_P(EX_CONSTANT(opline->op1)), EX_CONSTANT(opline->op1) + 1, ZEND_FETCH_CLASS_DEFAULT | ZEND_FETCH_CLASS_EXCEPTION); - if (UNEXPECTED(EG(exception) != NULL)) { - HANDLE_EXCEPTION(); - } if (UNEXPECTED(ce == NULL)) { + if (UNEXPECTED(EG(exception) != NULL)) { + HANDLE_EXCEPTION(); + } zend_throw_error(NULL, "Class '%s' not found", Z_STRVAL_P(EX_CONSTANT(opline->op1))); HANDLE_EXCEPTION(); } @@ -20731,9 +20714,9 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_STATIC_METHOD_CALL_SPEC_V if (UNEXPECTED(Z_TYPE_P(function_name) != IS_STRING)) { if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(function_name) == IS_UNDEF)) { GET_OP2_UNDEF_CV(function_name, BP_VAR_R); - } - if (UNEXPECTED(EG(exception) != NULL)) { - HANDLE_EXCEPTION(); + if (UNEXPECTED(EG(exception) != NULL)) { + HANDLE_EXCEPTION(); + } } zend_throw_error(NULL, "Function name must be a string"); @@ -22257,10 +22240,10 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_STATIC_METHOD_CALL_SPEC_V ce = CACHED_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op1))); if (UNEXPECTED(ce == NULL)) { ce = zend_fetch_class_by_name(Z_STR_P(EX_CONSTANT(opline->op1)), EX_CONSTANT(opline->op1) + 1, ZEND_FETCH_CLASS_DEFAULT | ZEND_FETCH_CLASS_EXCEPTION); - if (UNEXPECTED(EG(exception) != NULL)) { - HANDLE_EXCEPTION(); - } if (UNEXPECTED(ce == NULL)) { + if (UNEXPECTED(EG(exception) != NULL)) { + HANDLE_EXCEPTION(); + } zend_throw_error(NULL, "Class '%s' not found", Z_STRVAL_P(EX_CONSTANT(opline->op1))); HANDLE_EXCEPTION(); } @@ -22286,9 +22269,9 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_STATIC_METHOD_CALL_SPEC_V if (UNEXPECTED(Z_TYPE_P(function_name) != IS_STRING)) { if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(function_name) == IS_UNDEF)) { GET_OP2_UNDEF_CV(function_name, BP_VAR_R); - } - if (UNEXPECTED(EG(exception) != NULL)) { - HANDLE_EXCEPTION(); + if (UNEXPECTED(EG(exception) != NULL)) { + HANDLE_EXCEPTION(); + } } zend_throw_error(NULL, "Function name must be a string"); zval_ptr_dtor_nogc(free_op2); @@ -22681,9 +22664,9 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_CLONE_SPEC_UNUSED_HANDLER(ZEND } if (IS_UNUSED == IS_CV && UNEXPECTED(Z_TYPE_P(obj) == IS_UNDEF)) { GET_OP1_UNDEF_CV(obj, BP_VAR_R); - } - if (UNEXPECTED(EG(exception) != NULL)) { - HANDLE_EXCEPTION(); + if (UNEXPECTED(EG(exception) != NULL)) { + HANDLE_EXCEPTION(); + } } zend_throw_error(NULL, "__clone method called on non-object"); @@ -23639,12 +23622,11 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_METHOD_CALL_SPEC_UNUSED_C if (EXPECTED(Z_TYPE_P(function_name) == IS_STRING)) { break; } - } - if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(function_name) == IS_UNDEF)) { + } else if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(function_name) == IS_UNDEF)) { GET_OP2_UNDEF_CV(function_name, BP_VAR_R); - } - if (UNEXPECTED(EG(exception) != NULL)) { - HANDLE_EXCEPTION(); + if (UNEXPECTED(EG(exception) != NULL)) { + HANDLE_EXCEPTION(); + } } zend_throw_error(NULL, "Method name must be a string"); @@ -23672,9 +23654,10 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_METHOD_CALL_SPEC_UNUSED_C } if (IS_UNUSED == IS_CV && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) { GET_OP1_UNDEF_CV(object, BP_VAR_R); - } - if (UNEXPECTED(EG(exception) != NULL)) { - HANDLE_EXCEPTION(); + if (UNEXPECTED(EG(exception) != NULL)) { + + HANDLE_EXCEPTION(); + } } zend_throw_error(NULL, "Call to a member function %s() on %s", Z_STRVAL_P(function_name), zend_get_type_by_const(Z_TYPE_P(object))); @@ -23792,11 +23775,10 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_CONSTANT_SPEC_UNUSED_CON ce = CACHED_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op1))); } else { ce = zend_fetch_class_by_name(Z_STR_P(EX_CONSTANT(opline->op1)), EX_CONSTANT(opline->op1) + 1, ZEND_FETCH_CLASS_DEFAULT | ZEND_FETCH_CLASS_EXCEPTION); - if (UNEXPECTED(EG(exception) != NULL)) { - HANDLE_EXCEPTION(); - } if (UNEXPECTED(ce == NULL)) { - zend_throw_error(NULL, "Class '%s' not found", Z_STRVAL_P(EX_CONSTANT(opline->op1))); + if (EXPECTED(!EG(exception))) { + zend_throw_error(NULL, "Class '%s' not found", Z_STRVAL_P(EX_CONSTANT(opline->op1))); + } HANDLE_EXCEPTION(); } CACHE_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op1)), ce); @@ -26011,12 +25993,11 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_METHOD_CALL_SPEC_UNUSED_C if (EXPECTED(Z_TYPE_P(function_name) == IS_STRING)) { break; } - } - if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(function_name) == IS_UNDEF)) { + } else if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(function_name) == IS_UNDEF)) { GET_OP2_UNDEF_CV(function_name, BP_VAR_R); - } - if (UNEXPECTED(EG(exception) != NULL)) { - HANDLE_EXCEPTION(); + if (UNEXPECTED(EG(exception) != NULL)) { + HANDLE_EXCEPTION(); + } } zend_throw_error(NULL, "Method name must be a string"); @@ -26044,9 +26025,10 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_METHOD_CALL_SPEC_UNUSED_C } if (IS_UNUSED == IS_CV && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) { GET_OP1_UNDEF_CV(object, BP_VAR_R); - } - if (UNEXPECTED(EG(exception) != NULL)) { - HANDLE_EXCEPTION(); + if (UNEXPECTED(EG(exception) != NULL)) { + + HANDLE_EXCEPTION(); + } } zend_throw_error(NULL, "Call to a member function %s() on %s", Z_STRVAL_P(function_name), zend_get_type_by_const(Z_TYPE_P(object))); @@ -27483,12 +27465,11 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_METHOD_CALL_SPEC_UNUSED_T if (EXPECTED(Z_TYPE_P(function_name) == IS_STRING)) { break; } - } - if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(function_name) == IS_UNDEF)) { + } else if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(function_name) == IS_UNDEF)) { GET_OP2_UNDEF_CV(function_name, BP_VAR_R); - } - if (UNEXPECTED(EG(exception) != NULL)) { - HANDLE_EXCEPTION(); + if (UNEXPECTED(EG(exception) != NULL)) { + HANDLE_EXCEPTION(); + } } zend_throw_error(NULL, "Method name must be a string"); zval_ptr_dtor_nogc(free_op2); @@ -27516,9 +27497,10 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_METHOD_CALL_SPEC_UNUSED_T } if (IS_UNUSED == IS_CV && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) { GET_OP1_UNDEF_CV(object, BP_VAR_R); - } - if (UNEXPECTED(EG(exception) != NULL)) { - HANDLE_EXCEPTION(); + if (UNEXPECTED(EG(exception) != NULL)) { + zval_ptr_dtor_nogc(free_op2); + HANDLE_EXCEPTION(); + } } zend_throw_error(NULL, "Call to a member function %s() on %s", Z_STRVAL_P(function_name), zend_get_type_by_const(Z_TYPE_P(object))); zval_ptr_dtor_nogc(free_op2); @@ -28533,9 +28515,9 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_THROW_SPEC_CV_HANDLER(ZEND_OPC } if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(value) == IS_UNDEF)) { GET_OP1_UNDEF_CV(value, BP_VAR_R); - } - if (UNEXPECTED(EG(exception) != NULL)) { - HANDLE_EXCEPTION(); + if (UNEXPECTED(EG(exception) != NULL)) { + HANDLE_EXCEPTION(); + } } zend_throw_error(NULL, "Can only throw objects"); @@ -28781,9 +28763,9 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_CLONE_SPEC_CV_HANDLER(ZEND_OPC } if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(obj) == IS_UNDEF)) { GET_OP1_UNDEF_CV(obj, BP_VAR_R); - } - if (UNEXPECTED(EG(exception) != NULL)) { - HANDLE_EXCEPTION(); + if (UNEXPECTED(EG(exception) != NULL)) { + HANDLE_EXCEPTION(); + } } zend_throw_error(NULL, "__clone method called on non-object"); @@ -31703,12 +31685,11 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_METHOD_CALL_SPEC_CV_CONST if (EXPECTED(Z_TYPE_P(function_name) == IS_STRING)) { break; } - } - if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(function_name) == IS_UNDEF)) { + } else if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(function_name) == IS_UNDEF)) { GET_OP2_UNDEF_CV(function_name, BP_VAR_R); - } - if (UNEXPECTED(EG(exception) != NULL)) { - HANDLE_EXCEPTION(); + if (UNEXPECTED(EG(exception) != NULL)) { + HANDLE_EXCEPTION(); + } } zend_throw_error(NULL, "Method name must be a string"); @@ -31736,9 +31717,10 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_METHOD_CALL_SPEC_CV_CONST } if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) { GET_OP1_UNDEF_CV(object, BP_VAR_R); - } - if (UNEXPECTED(EG(exception) != NULL)) { - HANDLE_EXCEPTION(); + if (UNEXPECTED(EG(exception) != NULL)) { + + HANDLE_EXCEPTION(); + } } zend_throw_error(NULL, "Call to a member function %s() on %s", Z_STRVAL_P(function_name), zend_get_type_by_const(Z_TYPE_P(object))); @@ -32041,20 +32023,16 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_UNSET_VAR_SPEC_CV_CONST_HANDLE ce = CACHED_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op2))); if (UNEXPECTED(ce == NULL)) { ce = zend_fetch_class_by_name(Z_STR_P(EX_CONSTANT(opline->op2)), EX_CONSTANT(opline->op2) + 1, ZEND_FETCH_CLASS_DEFAULT | ZEND_FETCH_CLASS_EXCEPTION); - if (UNEXPECTED(EG(exception) != NULL)) { + if (UNEXPECTED(ce == NULL)) { + if (EXPECTED(!EG(exception))) { + zend_throw_error(NULL, "Class '%s' not found", Z_STRVAL_P(EX_CONSTANT(opline->op2))); + } if (IS_CV != IS_CONST && Z_TYPE(tmp) != IS_UNDEF) { zend_string_release(Z_STR(tmp)); } HANDLE_EXCEPTION(); } - if (UNEXPECTED(ce == NULL)) { - zend_throw_error(NULL, "Class '%s' not found", Z_STRVAL_P(EX_CONSTANT(opline->op2))); - if (IS_CV != IS_CONST) { - zend_string_release(Z_STR(tmp)); - } - HANDLE_EXCEPTION(); - } CACHE_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op2)), ce); } } else { @@ -33360,20 +33338,16 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_UNSET_VAR_SPEC_CV_VAR_HANDLER( ce = CACHED_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op2))); if (UNEXPECTED(ce == NULL)) { ce = zend_fetch_class_by_name(Z_STR_P(EX_CONSTANT(opline->op2)), EX_CONSTANT(opline->op2) + 1, ZEND_FETCH_CLASS_DEFAULT | ZEND_FETCH_CLASS_EXCEPTION); - if (UNEXPECTED(EG(exception) != NULL)) { + if (UNEXPECTED(ce == NULL)) { + if (EXPECTED(!EG(exception))) { + zend_throw_error(NULL, "Class '%s' not found", Z_STRVAL_P(EX_CONSTANT(opline->op2))); + } if (IS_CV != IS_CONST && Z_TYPE(tmp) != IS_UNDEF) { zend_string_release(Z_STR(tmp)); } HANDLE_EXCEPTION(); } - if (UNEXPECTED(ce == NULL)) { - zend_throw_error(NULL, "Class '%s' not found", Z_STRVAL_P(EX_CONSTANT(opline->op2))); - if (IS_CV != IS_CONST) { - zend_string_release(Z_STR(tmp)); - } - HANDLE_EXCEPTION(); - } CACHE_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op2)), ce); } } else { @@ -34569,20 +34543,16 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_UNSET_VAR_SPEC_CV_UNUSED_HANDL ce = CACHED_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op2))); if (UNEXPECTED(ce == NULL)) { ce = zend_fetch_class_by_name(Z_STR_P(EX_CONSTANT(opline->op2)), EX_CONSTANT(opline->op2) + 1, ZEND_FETCH_CLASS_DEFAULT | ZEND_FETCH_CLASS_EXCEPTION); - if (UNEXPECTED(EG(exception) != NULL)) { + if (UNEXPECTED(ce == NULL)) { + if (EXPECTED(!EG(exception))) { + zend_throw_error(NULL, "Class '%s' not found", Z_STRVAL_P(EX_CONSTANT(opline->op2))); + } if (IS_CV != IS_CONST && Z_TYPE(tmp) != IS_UNDEF) { zend_string_release(Z_STR(tmp)); } HANDLE_EXCEPTION(); } - if (UNEXPECTED(ce == NULL)) { - zend_throw_error(NULL, "Class '%s' not found", Z_STRVAL_P(EX_CONSTANT(opline->op2))); - if (IS_CV != IS_CONST) { - zend_string_release(Z_STR(tmp)); - } - HANDLE_EXCEPTION(); - } CACHE_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op2)), ce); } } else { @@ -36744,12 +36714,11 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_METHOD_CALL_SPEC_CV_CV_HA if (EXPECTED(Z_TYPE_P(function_name) == IS_STRING)) { break; } - } - if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(function_name) == IS_UNDEF)) { + } else if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(function_name) == IS_UNDEF)) { GET_OP2_UNDEF_CV(function_name, BP_VAR_R); - } - if (UNEXPECTED(EG(exception) != NULL)) { - HANDLE_EXCEPTION(); + if (UNEXPECTED(EG(exception) != NULL)) { + HANDLE_EXCEPTION(); + } } zend_throw_error(NULL, "Method name must be a string"); @@ -36777,9 +36746,10 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_METHOD_CALL_SPEC_CV_CV_HA } if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) { GET_OP1_UNDEF_CV(object, BP_VAR_R); - } - if (UNEXPECTED(EG(exception) != NULL)) { - HANDLE_EXCEPTION(); + if (UNEXPECTED(EG(exception) != NULL)) { + + HANDLE_EXCEPTION(); + } } zend_throw_error(NULL, "Call to a member function %s() on %s", Z_STRVAL_P(function_name), zend_get_type_by_const(Z_TYPE_P(object))); @@ -39301,12 +39271,11 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_METHOD_CALL_SPEC_CV_TMPVA if (EXPECTED(Z_TYPE_P(function_name) == IS_STRING)) { break; } - } - if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(function_name) == IS_UNDEF)) { + } else if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(function_name) == IS_UNDEF)) { GET_OP2_UNDEF_CV(function_name, BP_VAR_R); - } - if (UNEXPECTED(EG(exception) != NULL)) { - HANDLE_EXCEPTION(); + if (UNEXPECTED(EG(exception) != NULL)) { + HANDLE_EXCEPTION(); + } } zend_throw_error(NULL, "Method name must be a string"); zval_ptr_dtor_nogc(free_op2); @@ -39334,9 +39303,10 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_METHOD_CALL_SPEC_CV_TMPVA } if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) { GET_OP1_UNDEF_CV(object, BP_VAR_R); - } - if (UNEXPECTED(EG(exception) != NULL)) { - HANDLE_EXCEPTION(); + if (UNEXPECTED(EG(exception) != NULL)) { + zval_ptr_dtor_nogc(free_op2); + HANDLE_EXCEPTION(); + } } zend_throw_error(NULL, "Call to a member function %s() on %s", Z_STRVAL_P(function_name), zend_get_type_by_const(Z_TYPE_P(object))); zval_ptr_dtor_nogc(free_op2); @@ -40272,9 +40242,9 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_CLONE_SPEC_TMPVAR_HANDLER(ZEND } if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(obj) == IS_UNDEF)) { GET_OP1_UNDEF_CV(obj, BP_VAR_R); - } - if (UNEXPECTED(EG(exception) != NULL)) { - HANDLE_EXCEPTION(); + if (UNEXPECTED(EG(exception) != NULL)) { + HANDLE_EXCEPTION(); + } } zend_throw_error(NULL, "__clone method called on non-object"); zval_ptr_dtor_nogc(free_op1); @@ -41529,12 +41499,11 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_METHOD_CALL_SPEC_TMPVAR_C if (EXPECTED(Z_TYPE_P(function_name) == IS_STRING)) { break; } - } - if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(function_name) == IS_UNDEF)) { + } else if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(function_name) == IS_UNDEF)) { GET_OP2_UNDEF_CV(function_name, BP_VAR_R); - } - if (UNEXPECTED(EG(exception) != NULL)) { - HANDLE_EXCEPTION(); + if (UNEXPECTED(EG(exception) != NULL)) { + HANDLE_EXCEPTION(); + } } zend_throw_error(NULL, "Method name must be a string"); @@ -41562,9 +41531,10 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_METHOD_CALL_SPEC_TMPVAR_C } if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) { GET_OP1_UNDEF_CV(object, BP_VAR_R); - } - if (UNEXPECTED(EG(exception) != NULL)) { - HANDLE_EXCEPTION(); + if (UNEXPECTED(EG(exception) != NULL)) { + + HANDLE_EXCEPTION(); + } } zend_throw_error(NULL, "Call to a member function %s() on %s", Z_STRVAL_P(function_name), zend_get_type_by_const(Z_TYPE_P(object))); @@ -41738,20 +41708,16 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_UNSET_VAR_SPEC_TMPVAR_CONST_HA ce = CACHED_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op2))); if (UNEXPECTED(ce == NULL)) { ce = zend_fetch_class_by_name(Z_STR_P(EX_CONSTANT(opline->op2)), EX_CONSTANT(opline->op2) + 1, ZEND_FETCH_CLASS_DEFAULT | ZEND_FETCH_CLASS_EXCEPTION); - if (UNEXPECTED(EG(exception) != NULL)) { + if (UNEXPECTED(ce == NULL)) { + if (EXPECTED(!EG(exception))) { + zend_throw_error(NULL, "Class '%s' not found", Z_STRVAL_P(EX_CONSTANT(opline->op2))); + } if ((IS_TMP_VAR|IS_VAR) != IS_CONST && Z_TYPE(tmp) != IS_UNDEF) { zend_string_release(Z_STR(tmp)); } zval_ptr_dtor_nogc(free_op1); HANDLE_EXCEPTION(); } - if (UNEXPECTED(ce == NULL)) { - zend_throw_error(NULL, "Class '%s' not found", Z_STRVAL_P(EX_CONSTANT(opline->op2))); - if ((IS_TMP_VAR|IS_VAR) != IS_CONST) { - zend_string_release(Z_STR(tmp)); - } - HANDLE_EXCEPTION(); - } CACHE_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op2)), ce); } } else { @@ -42341,20 +42307,16 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_UNSET_VAR_SPEC_TMPVAR_VAR_HAND ce = CACHED_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op2))); if (UNEXPECTED(ce == NULL)) { ce = zend_fetch_class_by_name(Z_STR_P(EX_CONSTANT(opline->op2)), EX_CONSTANT(opline->op2) + 1, ZEND_FETCH_CLASS_DEFAULT | ZEND_FETCH_CLASS_EXCEPTION); - if (UNEXPECTED(EG(exception) != NULL)) { + if (UNEXPECTED(ce == NULL)) { + if (EXPECTED(!EG(exception))) { + zend_throw_error(NULL, "Class '%s' not found", Z_STRVAL_P(EX_CONSTANT(opline->op2))); + } if ((IS_TMP_VAR|IS_VAR) != IS_CONST && Z_TYPE(tmp) != IS_UNDEF) { zend_string_release(Z_STR(tmp)); } zval_ptr_dtor_nogc(free_op1); HANDLE_EXCEPTION(); } - if (UNEXPECTED(ce == NULL)) { - zend_throw_error(NULL, "Class '%s' not found", Z_STRVAL_P(EX_CONSTANT(opline->op2))); - if ((IS_TMP_VAR|IS_VAR) != IS_CONST) { - zend_string_release(Z_STR(tmp)); - } - HANDLE_EXCEPTION(); - } CACHE_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op2)), ce); } } else { @@ -42746,20 +42708,16 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_UNSET_VAR_SPEC_TMPVAR_UNUSED_H ce = CACHED_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op2))); if (UNEXPECTED(ce == NULL)) { ce = zend_fetch_class_by_name(Z_STR_P(EX_CONSTANT(opline->op2)), EX_CONSTANT(opline->op2) + 1, ZEND_FETCH_CLASS_DEFAULT | ZEND_FETCH_CLASS_EXCEPTION); - if (UNEXPECTED(EG(exception) != NULL)) { + if (UNEXPECTED(ce == NULL)) { + if (EXPECTED(!EG(exception))) { + zend_throw_error(NULL, "Class '%s' not found", Z_STRVAL_P(EX_CONSTANT(opline->op2))); + } if ((IS_TMP_VAR|IS_VAR) != IS_CONST && Z_TYPE(tmp) != IS_UNDEF) { zend_string_release(Z_STR(tmp)); } zval_ptr_dtor_nogc(free_op1); HANDLE_EXCEPTION(); } - if (UNEXPECTED(ce == NULL)) { - zend_throw_error(NULL, "Class '%s' not found", Z_STRVAL_P(EX_CONSTANT(opline->op2))); - if ((IS_TMP_VAR|IS_VAR) != IS_CONST) { - zend_string_release(Z_STR(tmp)); - } - HANDLE_EXCEPTION(); - } CACHE_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op2)), ce); } } else { @@ -43655,12 +43613,11 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_METHOD_CALL_SPEC_TMPVAR_C if (EXPECTED(Z_TYPE_P(function_name) == IS_STRING)) { break; } - } - if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(function_name) == IS_UNDEF)) { + } else if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(function_name) == IS_UNDEF)) { GET_OP2_UNDEF_CV(function_name, BP_VAR_R); - } - if (UNEXPECTED(EG(exception) != NULL)) { - HANDLE_EXCEPTION(); + if (UNEXPECTED(EG(exception) != NULL)) { + HANDLE_EXCEPTION(); + } } zend_throw_error(NULL, "Method name must be a string"); @@ -43688,9 +43645,10 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_METHOD_CALL_SPEC_TMPVAR_C } if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) { GET_OP1_UNDEF_CV(object, BP_VAR_R); - } - if (UNEXPECTED(EG(exception) != NULL)) { - HANDLE_EXCEPTION(); + if (UNEXPECTED(EG(exception) != NULL)) { + + HANDLE_EXCEPTION(); + } } zend_throw_error(NULL, "Call to a member function %s() on %s", Z_STRVAL_P(function_name), zend_get_type_by_const(Z_TYPE_P(object))); @@ -44793,12 +44751,11 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_METHOD_CALL_SPEC_TMPVAR_T if (EXPECTED(Z_TYPE_P(function_name) == IS_STRING)) { break; } - } - if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(function_name) == IS_UNDEF)) { + } else if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(function_name) == IS_UNDEF)) { GET_OP2_UNDEF_CV(function_name, BP_VAR_R); - } - if (UNEXPECTED(EG(exception) != NULL)) { - HANDLE_EXCEPTION(); + if (UNEXPECTED(EG(exception) != NULL)) { + HANDLE_EXCEPTION(); + } } zend_throw_error(NULL, "Method name must be a string"); zval_ptr_dtor_nogc(free_op2); @@ -44826,9 +44783,10 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_METHOD_CALL_SPEC_TMPVAR_T } if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) { GET_OP1_UNDEF_CV(object, BP_VAR_R); - } - if (UNEXPECTED(EG(exception) != NULL)) { - HANDLE_EXCEPTION(); + if (UNEXPECTED(EG(exception) != NULL)) { + zval_ptr_dtor_nogc(free_op2); + HANDLE_EXCEPTION(); + } } zend_throw_error(NULL, "Call to a member function %s() on %s", Z_STRVAL_P(function_name), zend_get_type_by_const(Z_TYPE_P(object))); zval_ptr_dtor_nogc(free_op2);