]> granicus.if.org Git - php/commitdiff
Assert exception set in HANDLE_EXCEPTION()
authorNikita Popov <nikita.ppv@gmail.com>
Tue, 7 Jul 2020 09:31:05 +0000 (11:31 +0200)
committerNikita Popov <nikita.ppv@gmail.com>
Tue, 7 Jul 2020 09:31:05 +0000 (11:31 +0200)
Some code paths were checking this manually, but we can turn this
into a general assertion to avoid surprises (functions returning
failure without throwing).

Zend/zend_vm_def.h
Zend/zend_vm_execute.h
Zend/zend_vm_gen.php

index c316795450fe03d54ade200599d7792542a36331..1365958e5a475ee3dead565113d1d2d43950ce04 100644 (file)
@@ -1094,7 +1094,6 @@ ZEND_VM_HANDLER(29, ZEND_ASSIGN_STATIC_PROP_OP, ANY, ANY, OP)
        SAVE_OPLINE();
 
        if (UNEXPECTED(zend_fetch_static_property_address(&prop, &prop_info, (opline+1)->extended_value, BP_VAR_RW, 0 OPLINE_CC EXECUTE_DATA_CC) != SUCCESS)) {
-               ZEND_ASSERT(EG(exception));
                UNDEF_RESULT();
                FREE_UNFETCHED_OP_DATA();
                HANDLE_EXCEPTION();
@@ -3523,7 +3522,6 @@ ZEND_VM_HANDLER(113, ZEND_INIT_STATIC_METHOD_CALL, UNUSED|CLASS_FETCH|CONST|VAR,
                if (UNEXPECTED(ce == NULL)) {
                        ce = zend_fetch_class_by_name(Z_STR_P(RT_CONSTANT(opline, opline->op1)), Z_STR_P(RT_CONSTANT(opline, opline->op1) + 1), ZEND_FETCH_CLASS_DEFAULT | ZEND_FETCH_CLASS_EXCEPTION);
                        if (UNEXPECTED(ce == NULL)) {
-                               ZEND_ASSERT(EG(exception));
                                FREE_UNFETCHED_OP2();
                                HANDLE_EXCEPTION();
                        }
@@ -3534,7 +3532,6 @@ ZEND_VM_HANDLER(113, ZEND_INIT_STATIC_METHOD_CALL, UNUSED|CLASS_FETCH|CONST|VAR,
        } else if (OP1_TYPE == IS_UNUSED) {
                ce = zend_fetch_class(NULL, opline->op1.num);
                if (UNEXPECTED(ce == NULL)) {
-                       ZEND_ASSERT(EG(exception));
                        FREE_UNFETCHED_OP2();
                        HANDLE_EXCEPTION();
                }
@@ -5294,7 +5291,6 @@ ZEND_VM_HANDLER(68, ZEND_NEW, UNUSED|CLASS_FETCH|CONST|VAR, UNUSED|CACHE_SLOT, N
                if (UNEXPECTED(ce == NULL)) {
                        ce = zend_fetch_class_by_name(Z_STR_P(RT_CONSTANT(opline, opline->op1)), Z_STR_P(RT_CONSTANT(opline, opline->op1) + 1), ZEND_FETCH_CLASS_DEFAULT | ZEND_FETCH_CLASS_EXCEPTION);
                        if (UNEXPECTED(ce == NULL)) {
-                               ZEND_ASSERT(EG(exception));
                                ZVAL_UNDEF(EX_VAR(opline->result.var));
                                HANDLE_EXCEPTION();
                        }
@@ -5303,7 +5299,6 @@ ZEND_VM_HANDLER(68, ZEND_NEW, UNUSED|CLASS_FETCH|CONST|VAR, UNUSED|CACHE_SLOT, N
        } else if (OP1_TYPE == IS_UNUSED) {
                ce = zend_fetch_class(NULL, opline->op1.num);
                if (UNEXPECTED(ce == NULL)) {
-                       ZEND_ASSERT(EG(exception));
                        ZVAL_UNDEF(EX_VAR(opline->result.var));
                        HANDLE_EXCEPTION();
                }
@@ -5450,7 +5445,6 @@ ZEND_VM_HANDLER(181, ZEND_FETCH_CLASS_CONSTANT, VAR|CONST|UNUSED|CLASS_FETCH, CO
                        } else {
                                ce = zend_fetch_class_by_name(Z_STR_P(RT_CONSTANT(opline, opline->op1)), Z_STR_P(RT_CONSTANT(opline, opline->op1) + 1), ZEND_FETCH_CLASS_DEFAULT | ZEND_FETCH_CLASS_EXCEPTION);
                                if (UNEXPECTED(ce == NULL)) {
-                                       ZEND_ASSERT(EG(exception));
                                        ZVAL_UNDEF(EX_VAR(opline->result.var));
                                        HANDLE_EXCEPTION();
                                }
@@ -5459,7 +5453,6 @@ ZEND_VM_HANDLER(181, ZEND_FETCH_CLASS_CONSTANT, VAR|CONST|UNUSED|CLASS_FETCH, CO
                        if (OP1_TYPE == IS_UNUSED) {
                                ce = zend_fetch_class(NULL, opline->op1.num);
                                if (UNEXPECTED(ce == NULL)) {
-                                       ZEND_ASSERT(EG(exception));
                                        ZVAL_UNDEF(EX_VAR(opline->result.var));
                                        HANDLE_EXCEPTION();
                                }
@@ -5955,7 +5948,6 @@ ZEND_VM_COLD_HANDLER(179, ZEND_UNSET_STATIC_PROP, ANY, ANY, CACHE_SLOT)
                if (UNEXPECTED(ce == NULL)) {
                        ce = zend_fetch_class_by_name(Z_STR_P(RT_CONSTANT(opline, opline->op2)), Z_STR_P(RT_CONSTANT(opline, opline->op2) + 1), ZEND_FETCH_CLASS_DEFAULT | ZEND_FETCH_CLASS_EXCEPTION);
                        if (UNEXPECTED(ce == NULL)) {
-                               ZEND_ASSERT(EG(exception));
                                FREE_UNFETCHED_OP1();
                                HANDLE_EXCEPTION();
                        }
@@ -5964,7 +5956,6 @@ ZEND_VM_COLD_HANDLER(179, ZEND_UNSET_STATIC_PROP, ANY, ANY, CACHE_SLOT)
        } else if (OP2_TYPE == IS_UNUSED) {
                ce = zend_fetch_class(NULL, opline->op2.num);
                if (UNEXPECTED(ce == NULL)) {
-                       ZEND_ASSERT(EG(exception));
                        FREE_UNFETCHED_OP1();
                        HANDLE_EXCEPTION();
                }
@@ -7232,7 +7223,6 @@ ZEND_VM_C_LABEL(try_instanceof):
                } else if (OP2_TYPE == IS_UNUSED) {
                        ce = zend_fetch_class(NULL, opline->op2.num);
                        if (UNEXPECTED(ce == NULL)) {
-                               ZEND_ASSERT(EG(exception));
                                FREE_OP1();
                                ZVAL_UNDEF(EX_VAR(opline->result.var));
                                HANDLE_EXCEPTION();
index e97301793256de31a3c6a4b9b5ec45dca9a6be34..e5dcadb0bfd47a242857ca07ba5890b3d2eabb07 100644 (file)
@@ -409,8 +409,8 @@ typedef ZEND_OPCODE_HANDLER_RET (ZEND_FASTCALL *opcode_handler_t) (ZEND_OPCODE_H
 # define SAVE_OPLINE()
 # define SAVE_OPLINE_EX()
 #endif
-#define HANDLE_EXCEPTION() LOAD_OPLINE(); ZEND_VM_CONTINUE()
-#define HANDLE_EXCEPTION_LEAVE() LOAD_OPLINE(); ZEND_VM_LEAVE()
+#define HANDLE_EXCEPTION() ZEND_ASSERT(EG(exception)); LOAD_OPLINE(); ZEND_VM_CONTINUE()
+#define HANDLE_EXCEPTION_LEAVE() ZEND_ASSERT(EG(exception)); LOAD_OPLINE(); ZEND_VM_LEAVE()
 #if defined(ZEND_VM_FP_GLOBAL_REG)
 # define ZEND_VM_ENTER_EX()        ZEND_VM_INTERRUPT_CHECK(); ZEND_VM_CONTINUE()
 # define ZEND_VM_ENTER()           execute_data = EG(current_execute_data); LOAD_OPLINE(); ZEND_VM_ENTER_EX()
@@ -764,7 +764,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_STATIC_PROP_OP_SPEC_HAN
        SAVE_OPLINE();
 
        if (UNEXPECTED(zend_fetch_static_property_address(&prop, &prop_info, (opline+1)->extended_value, BP_VAR_RW, 0 OPLINE_CC EXECUTE_DATA_CC) != SUCCESS)) {
-               ZEND_ASSERT(EG(exception));
                UNDEF_RESULT();
                FREE_UNFETCHED_OP((opline+1)->op1_type, (opline+1)->op1.var);
                HANDLE_EXCEPTION();
@@ -2229,7 +2228,6 @@ static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_UNSET_STATIC_PROP
                if (UNEXPECTED(ce == NULL)) {
                        ce = zend_fetch_class_by_name(Z_STR_P(RT_CONSTANT(opline, opline->op2)), Z_STR_P(RT_CONSTANT(opline, opline->op2) + 1), ZEND_FETCH_CLASS_DEFAULT | ZEND_FETCH_CLASS_EXCEPTION);
                        if (UNEXPECTED(ce == NULL)) {
-                               ZEND_ASSERT(EG(exception));
                                FREE_UNFETCHED_OP(opline->op1_type, opline->op1.var);
                                HANDLE_EXCEPTION();
                        }
@@ -2238,7 +2236,6 @@ static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_UNSET_STATIC_PROP
        } else if (opline->op2_type == IS_UNUSED) {
                ce = zend_fetch_class(NULL, opline->op2.num);
                if (UNEXPECTED(ce == NULL)) {
-                       ZEND_ASSERT(EG(exception));
                        FREE_UNFETCHED_OP(opline->op1_type, opline->op1.var);
                        HANDLE_EXCEPTION();
                }
@@ -5729,7 +5726,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_STATIC_METHOD_CALL_SPEC_C
                if (UNEXPECTED(ce == NULL)) {
                        ce = zend_fetch_class_by_name(Z_STR_P(RT_CONSTANT(opline, opline->op1)), Z_STR_P(RT_CONSTANT(opline, opline->op1) + 1), ZEND_FETCH_CLASS_DEFAULT | ZEND_FETCH_CLASS_EXCEPTION);
                        if (UNEXPECTED(ce == NULL)) {
-                               ZEND_ASSERT(EG(exception));
 
                                HANDLE_EXCEPTION();
                        }
@@ -5740,7 +5736,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_STATIC_METHOD_CALL_SPEC_C
        } else if (IS_CONST == IS_UNUSED) {
                ce = zend_fetch_class(NULL, opline->op1.num);
                if (UNEXPECTED(ce == NULL)) {
-                       ZEND_ASSERT(EG(exception));
 
                        HANDLE_EXCEPTION();
                }
@@ -5926,7 +5921,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_CLASS_CONSTANT_SPEC_CONS
                        } else {
                                ce = zend_fetch_class_by_name(Z_STR_P(RT_CONSTANT(opline, opline->op1)), Z_STR_P(RT_CONSTANT(opline, opline->op1) + 1), ZEND_FETCH_CLASS_DEFAULT | ZEND_FETCH_CLASS_EXCEPTION);
                                if (UNEXPECTED(ce == NULL)) {
-                                       ZEND_ASSERT(EG(exception));
                                        ZVAL_UNDEF(EX_VAR(opline->result.var));
                                        HANDLE_EXCEPTION();
                                }
@@ -5935,7 +5929,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_CLASS_CONSTANT_SPEC_CONS
                        if (IS_CONST == IS_UNUSED) {
                                ce = zend_fetch_class(NULL, opline->op1.num);
                                if (UNEXPECTED(ce == NULL)) {
-                                       ZEND_ASSERT(EG(exception));
                                        ZVAL_UNDEF(EX_VAR(opline->result.var));
                                        HANDLE_EXCEPTION();
                                }
@@ -7904,7 +7897,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_STATIC_METHOD_CALL_SPEC_C
                if (UNEXPECTED(ce == NULL)) {
                        ce = zend_fetch_class_by_name(Z_STR_P(RT_CONSTANT(opline, opline->op1)), Z_STR_P(RT_CONSTANT(opline, opline->op1) + 1), ZEND_FETCH_CLASS_DEFAULT | ZEND_FETCH_CLASS_EXCEPTION);
                        if (UNEXPECTED(ce == NULL)) {
-                               ZEND_ASSERT(EG(exception));
                                zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
                                HANDLE_EXCEPTION();
                        }
@@ -7915,7 +7907,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_STATIC_METHOD_CALL_SPEC_C
        } else if (IS_CONST == IS_UNUSED) {
                ce = zend_fetch_class(NULL, opline->op1.num);
                if (UNEXPECTED(ce == NULL)) {
-                       ZEND_ASSERT(EG(exception));
                        zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
                        HANDLE_EXCEPTION();
                }
@@ -8647,7 +8638,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_STATIC_METHOD_CALL_SPEC_C
                if (UNEXPECTED(ce == NULL)) {
                        ce = zend_fetch_class_by_name(Z_STR_P(RT_CONSTANT(opline, opline->op1)), Z_STR_P(RT_CONSTANT(opline, opline->op1) + 1), ZEND_FETCH_CLASS_DEFAULT | ZEND_FETCH_CLASS_EXCEPTION);
                        if (UNEXPECTED(ce == NULL)) {
-                               ZEND_ASSERT(EG(exception));
 
                                HANDLE_EXCEPTION();
                        }
@@ -8658,7 +8648,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_STATIC_METHOD_CALL_SPEC_C
        } else if (IS_CONST == IS_UNUSED) {
                ce = zend_fetch_class(NULL, opline->op1.num);
                if (UNEXPECTED(ce == NULL)) {
-                       ZEND_ASSERT(EG(exception));
 
                        HANDLE_EXCEPTION();
                }
@@ -8836,7 +8825,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_NEW_SPEC_CONST_UNUSED_HANDLER(
                if (UNEXPECTED(ce == NULL)) {
                        ce = zend_fetch_class_by_name(Z_STR_P(RT_CONSTANT(opline, opline->op1)), Z_STR_P(RT_CONSTANT(opline, opline->op1) + 1), ZEND_FETCH_CLASS_DEFAULT | ZEND_FETCH_CLASS_EXCEPTION);
                        if (UNEXPECTED(ce == NULL)) {
-                               ZEND_ASSERT(EG(exception));
                                ZVAL_UNDEF(EX_VAR(opline->result.var));
                                HANDLE_EXCEPTION();
                        }
@@ -8845,7 +8833,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_NEW_SPEC_CONST_UNUSED_HANDLER(
        } else if (IS_CONST == IS_UNUSED) {
                ce = zend_fetch_class(NULL, opline->op1.num);
                if (UNEXPECTED(ce == NULL)) {
-                       ZEND_ASSERT(EG(exception));
                        ZVAL_UNDEF(EX_VAR(opline->result.var));
                        HANDLE_EXCEPTION();
                }
@@ -10160,7 +10147,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_STATIC_METHOD_CALL_SPEC_C
                if (UNEXPECTED(ce == NULL)) {
                        ce = zend_fetch_class_by_name(Z_STR_P(RT_CONSTANT(opline, opline->op1)), Z_STR_P(RT_CONSTANT(opline, opline->op1) + 1), ZEND_FETCH_CLASS_DEFAULT | ZEND_FETCH_CLASS_EXCEPTION);
                        if (UNEXPECTED(ce == NULL)) {
-                               ZEND_ASSERT(EG(exception));
 
                                HANDLE_EXCEPTION();
                        }
@@ -10171,7 +10157,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_STATIC_METHOD_CALL_SPEC_C
        } else if (IS_CONST == IS_UNUSED) {
                ce = zend_fetch_class(NULL, opline->op1.num);
                if (UNEXPECTED(ce == NULL)) {
-                       ZEND_ASSERT(EG(exception));
 
                        HANDLE_EXCEPTION();
                }
@@ -14671,7 +14656,6 @@ try_instanceof:
                } else if (IS_CONST == IS_UNUSED) {
                        ce = zend_fetch_class(NULL, opline->op2.num);
                        if (UNEXPECTED(ce == NULL)) {
-                               ZEND_ASSERT(EG(exception));
                                zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
                                ZVAL_UNDEF(EX_VAR(opline->result.var));
                                HANDLE_EXCEPTION();
@@ -16053,7 +16037,6 @@ try_instanceof:
                } else if (IS_VAR == IS_UNUSED) {
                        ce = zend_fetch_class(NULL, opline->op2.num);
                        if (UNEXPECTED(ce == NULL)) {
-                               ZEND_ASSERT(EG(exception));
                                zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
                                ZVAL_UNDEF(EX_VAR(opline->result.var));
                                HANDLE_EXCEPTION();
@@ -16306,7 +16289,6 @@ try_instanceof:
                } else if (IS_UNUSED == IS_UNUSED) {
                        ce = zend_fetch_class(NULL, opline->op2.num);
                        if (UNEXPECTED(ce == NULL)) {
-                               ZEND_ASSERT(EG(exception));
                                zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
                                ZVAL_UNDEF(EX_VAR(opline->result.var));
                                HANDLE_EXCEPTION();
@@ -22642,7 +22624,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_STATIC_METHOD_CALL_SPEC_V
                if (UNEXPECTED(ce == NULL)) {
                        ce = zend_fetch_class_by_name(Z_STR_P(RT_CONSTANT(opline, opline->op1)), Z_STR_P(RT_CONSTANT(opline, opline->op1) + 1), ZEND_FETCH_CLASS_DEFAULT | ZEND_FETCH_CLASS_EXCEPTION);
                        if (UNEXPECTED(ce == NULL)) {
-                               ZEND_ASSERT(EG(exception));
 
                                HANDLE_EXCEPTION();
                        }
@@ -22653,7 +22634,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_STATIC_METHOD_CALL_SPEC_V
        } else if (IS_VAR == IS_UNUSED) {
                ce = zend_fetch_class(NULL, opline->op1.num);
                if (UNEXPECTED(ce == NULL)) {
-                       ZEND_ASSERT(EG(exception));
 
                        HANDLE_EXCEPTION();
                }
@@ -22778,7 +22758,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_CLASS_CONSTANT_SPEC_VAR_
                        } else {
                                ce = zend_fetch_class_by_name(Z_STR_P(RT_CONSTANT(opline, opline->op1)), Z_STR_P(RT_CONSTANT(opline, opline->op1) + 1), ZEND_FETCH_CLASS_DEFAULT | ZEND_FETCH_CLASS_EXCEPTION);
                                if (UNEXPECTED(ce == NULL)) {
-                                       ZEND_ASSERT(EG(exception));
                                        ZVAL_UNDEF(EX_VAR(opline->result.var));
                                        HANDLE_EXCEPTION();
                                }
@@ -22787,7 +22766,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_CLASS_CONSTANT_SPEC_VAR_
                        if (IS_VAR == IS_UNUSED) {
                                ce = zend_fetch_class(NULL, opline->op1.num);
                                if (UNEXPECTED(ce == NULL)) {
-                                       ZEND_ASSERT(EG(exception));
                                        ZVAL_UNDEF(EX_VAR(opline->result.var));
                                        HANDLE_EXCEPTION();
                                }
@@ -24872,7 +24850,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_STATIC_METHOD_CALL_SPEC_V
                if (UNEXPECTED(ce == NULL)) {
                        ce = zend_fetch_class_by_name(Z_STR_P(RT_CONSTANT(opline, opline->op1)), Z_STR_P(RT_CONSTANT(opline, opline->op1) + 1), ZEND_FETCH_CLASS_DEFAULT | ZEND_FETCH_CLASS_EXCEPTION);
                        if (UNEXPECTED(ce == NULL)) {
-                               ZEND_ASSERT(EG(exception));
                                zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
                                HANDLE_EXCEPTION();
                        }
@@ -24883,7 +24860,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_STATIC_METHOD_CALL_SPEC_V
        } else if (IS_VAR == IS_UNUSED) {
                ce = zend_fetch_class(NULL, opline->op1.num);
                if (UNEXPECTED(ce == NULL)) {
-                       ZEND_ASSERT(EG(exception));
                        zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
                        HANDLE_EXCEPTION();
                }
@@ -26144,7 +26120,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_STATIC_METHOD_CALL_SPEC_V
                if (UNEXPECTED(ce == NULL)) {
                        ce = zend_fetch_class_by_name(Z_STR_P(RT_CONSTANT(opline, opline->op1)), Z_STR_P(RT_CONSTANT(opline, opline->op1) + 1), ZEND_FETCH_CLASS_DEFAULT | ZEND_FETCH_CLASS_EXCEPTION);
                        if (UNEXPECTED(ce == NULL)) {
-                               ZEND_ASSERT(EG(exception));
 
                                HANDLE_EXCEPTION();
                        }
@@ -26155,7 +26130,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_STATIC_METHOD_CALL_SPEC_V
        } else if (IS_VAR == IS_UNUSED) {
                ce = zend_fetch_class(NULL, opline->op1.num);
                if (UNEXPECTED(ce == NULL)) {
-                       ZEND_ASSERT(EG(exception));
 
                        HANDLE_EXCEPTION();
                }
@@ -26333,7 +26307,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_NEW_SPEC_VAR_UNUSED_HANDLER(ZE
                if (UNEXPECTED(ce == NULL)) {
                        ce = zend_fetch_class_by_name(Z_STR_P(RT_CONSTANT(opline, opline->op1)), Z_STR_P(RT_CONSTANT(opline, opline->op1) + 1), ZEND_FETCH_CLASS_DEFAULT | ZEND_FETCH_CLASS_EXCEPTION);
                        if (UNEXPECTED(ce == NULL)) {
-                               ZEND_ASSERT(EG(exception));
                                ZVAL_UNDEF(EX_VAR(opline->result.var));
                                HANDLE_EXCEPTION();
                        }
@@ -26342,7 +26315,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_NEW_SPEC_VAR_UNUSED_HANDLER(ZE
        } else if (IS_VAR == IS_UNUSED) {
                ce = zend_fetch_class(NULL, opline->op1.num);
                if (UNEXPECTED(ce == NULL)) {
-                       ZEND_ASSERT(EG(exception));
                        ZVAL_UNDEF(EX_VAR(opline->result.var));
                        HANDLE_EXCEPTION();
                }
@@ -28397,7 +28369,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_STATIC_METHOD_CALL_SPEC_V
                if (UNEXPECTED(ce == NULL)) {
                        ce = zend_fetch_class_by_name(Z_STR_P(RT_CONSTANT(opline, opline->op1)), Z_STR_P(RT_CONSTANT(opline, opline->op1) + 1), ZEND_FETCH_CLASS_DEFAULT | ZEND_FETCH_CLASS_EXCEPTION);
                        if (UNEXPECTED(ce == NULL)) {
-                               ZEND_ASSERT(EG(exception));
 
                                HANDLE_EXCEPTION();
                        }
@@ -28408,7 +28379,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_STATIC_METHOD_CALL_SPEC_V
        } else if (IS_VAR == IS_UNUSED) {
                ce = zend_fetch_class(NULL, opline->op1.num);
                if (UNEXPECTED(ce == NULL)) {
-                       ZEND_ASSERT(EG(exception));
 
                        HANDLE_EXCEPTION();
                }
@@ -30582,7 +30552,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_STATIC_METHOD_CALL_SPEC_U
                if (UNEXPECTED(ce == NULL)) {
                        ce = zend_fetch_class_by_name(Z_STR_P(RT_CONSTANT(opline, opline->op1)), Z_STR_P(RT_CONSTANT(opline, opline->op1) + 1), ZEND_FETCH_CLASS_DEFAULT | ZEND_FETCH_CLASS_EXCEPTION);
                        if (UNEXPECTED(ce == NULL)) {
-                               ZEND_ASSERT(EG(exception));
 
                                HANDLE_EXCEPTION();
                        }
@@ -30593,7 +30562,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_STATIC_METHOD_CALL_SPEC_U
        } else if (IS_UNUSED == IS_UNUSED) {
                ce = zend_fetch_class(NULL, opline->op1.num);
                if (UNEXPECTED(ce == NULL)) {
-                       ZEND_ASSERT(EG(exception));
 
                        HANDLE_EXCEPTION();
                }
@@ -30734,7 +30702,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_CLASS_CONSTANT_SPEC_UNUS
                        } else {
                                ce = zend_fetch_class_by_name(Z_STR_P(RT_CONSTANT(opline, opline->op1)), Z_STR_P(RT_CONSTANT(opline, opline->op1) + 1), ZEND_FETCH_CLASS_DEFAULT | ZEND_FETCH_CLASS_EXCEPTION);
                                if (UNEXPECTED(ce == NULL)) {
-                                       ZEND_ASSERT(EG(exception));
                                        ZVAL_UNDEF(EX_VAR(opline->result.var));
                                        HANDLE_EXCEPTION();
                                }
@@ -30743,7 +30710,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_CLASS_CONSTANT_SPEC_UNUS
                        if (IS_UNUSED == IS_UNUSED) {
                                ce = zend_fetch_class(NULL, opline->op1.num);
                                if (UNEXPECTED(ce == NULL)) {
-                                       ZEND_ASSERT(EG(exception));
                                        ZVAL_UNDEF(EX_VAR(opline->result.var));
                                        HANDLE_EXCEPTION();
                                }
@@ -32450,7 +32416,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_STATIC_METHOD_CALL_SPEC_U
                if (UNEXPECTED(ce == NULL)) {
                        ce = zend_fetch_class_by_name(Z_STR_P(RT_CONSTANT(opline, opline->op1)), Z_STR_P(RT_CONSTANT(opline, opline->op1) + 1), ZEND_FETCH_CLASS_DEFAULT | ZEND_FETCH_CLASS_EXCEPTION);
                        if (UNEXPECTED(ce == NULL)) {
-                               ZEND_ASSERT(EG(exception));
                                zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
                                HANDLE_EXCEPTION();
                        }
@@ -32461,7 +32426,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_STATIC_METHOD_CALL_SPEC_U
        } else if (IS_UNUSED == IS_UNUSED) {
                ce = zend_fetch_class(NULL, opline->op1.num);
                if (UNEXPECTED(ce == NULL)) {
-                       ZEND_ASSERT(EG(exception));
                        zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
                        HANDLE_EXCEPTION();
                }
@@ -32866,7 +32830,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_STATIC_METHOD_CALL_SPEC_U
                if (UNEXPECTED(ce == NULL)) {
                        ce = zend_fetch_class_by_name(Z_STR_P(RT_CONSTANT(opline, opline->op1)), Z_STR_P(RT_CONSTANT(opline, opline->op1) + 1), ZEND_FETCH_CLASS_DEFAULT | ZEND_FETCH_CLASS_EXCEPTION);
                        if (UNEXPECTED(ce == NULL)) {
-                               ZEND_ASSERT(EG(exception));
 
                                HANDLE_EXCEPTION();
                        }
@@ -32877,7 +32840,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_STATIC_METHOD_CALL_SPEC_U
        } else if (IS_UNUSED == IS_UNUSED) {
                ce = zend_fetch_class(NULL, opline->op1.num);
                if (UNEXPECTED(ce == NULL)) {
-                       ZEND_ASSERT(EG(exception));
 
                        HANDLE_EXCEPTION();
                }
@@ -33055,7 +33017,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_NEW_SPEC_UNUSED_UNUSED_HANDLER
                if (UNEXPECTED(ce == NULL)) {
                        ce = zend_fetch_class_by_name(Z_STR_P(RT_CONSTANT(opline, opline->op1)), Z_STR_P(RT_CONSTANT(opline, opline->op1) + 1), ZEND_FETCH_CLASS_DEFAULT | ZEND_FETCH_CLASS_EXCEPTION);
                        if (UNEXPECTED(ce == NULL)) {
-                               ZEND_ASSERT(EG(exception));
                                ZVAL_UNDEF(EX_VAR(opline->result.var));
                                HANDLE_EXCEPTION();
                        }
@@ -33064,7 +33025,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_NEW_SPEC_UNUSED_UNUSED_HANDLER
        } else if (IS_UNUSED == IS_UNUSED) {
                ce = zend_fetch_class(NULL, opline->op1.num);
                if (UNEXPECTED(ce == NULL)) {
-                       ZEND_ASSERT(EG(exception));
                        ZVAL_UNDEF(EX_VAR(opline->result.var));
                        HANDLE_EXCEPTION();
                }
@@ -34844,7 +34804,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_STATIC_METHOD_CALL_SPEC_U
                if (UNEXPECTED(ce == NULL)) {
                        ce = zend_fetch_class_by_name(Z_STR_P(RT_CONSTANT(opline, opline->op1)), Z_STR_P(RT_CONSTANT(opline, opline->op1) + 1), ZEND_FETCH_CLASS_DEFAULT | ZEND_FETCH_CLASS_EXCEPTION);
                        if (UNEXPECTED(ce == NULL)) {
-                               ZEND_ASSERT(EG(exception));
 
                                HANDLE_EXCEPTION();
                        }
@@ -34855,7 +34814,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_STATIC_METHOD_CALL_SPEC_U
        } else if (IS_UNUSED == IS_UNUSED) {
                ce = zend_fetch_class(NULL, opline->op1.num);
                if (UNEXPECTED(ce == NULL)) {
-                       ZEND_ASSERT(EG(exception));
 
                        HANDLE_EXCEPTION();
                }
@@ -40111,7 +40069,6 @@ try_instanceof:
                } else if (IS_CONST == IS_UNUSED) {
                        ce = zend_fetch_class(NULL, opline->op2.num);
                        if (UNEXPECTED(ce == NULL)) {
-                               ZEND_ASSERT(EG(exception));
 
                                ZVAL_UNDEF(EX_VAR(opline->result.var));
                                HANDLE_EXCEPTION();
@@ -43850,7 +43807,6 @@ try_instanceof:
                } else if (IS_VAR == IS_UNUSED) {
                        ce = zend_fetch_class(NULL, opline->op2.num);
                        if (UNEXPECTED(ce == NULL)) {
-                               ZEND_ASSERT(EG(exception));
 
                                ZVAL_UNDEF(EX_VAR(opline->result.var));
                                HANDLE_EXCEPTION();
@@ -44929,7 +44885,6 @@ try_instanceof:
                } else if (IS_UNUSED == IS_UNUSED) {
                        ce = zend_fetch_class(NULL, opline->op2.num);
                        if (UNEXPECTED(ce == NULL)) {
-                               ZEND_ASSERT(EG(exception));
 
                                ZVAL_UNDEF(EX_VAR(opline->result.var));
                                HANDLE_EXCEPTION();
index d5300ffd7939135cd0aa583e3593a11b8ee06894..8c13337f65012563d9ac0c0a11f5de993cf6c359 100755 (executable)
@@ -1897,8 +1897,8 @@ function gen_executor($f, $skl, $spec, $kind, $executor_name, $initializer_name)
                             out($f,"# define SAVE_OPLINE()\n");
                             out($f,"# define SAVE_OPLINE_EX()\n");
                             out($f,"#endif\n");
-                            out($f,"#define HANDLE_EXCEPTION() LOAD_OPLINE(); ZEND_VM_CONTINUE()\n");
-                            out($f,"#define HANDLE_EXCEPTION_LEAVE() LOAD_OPLINE(); ZEND_VM_LEAVE()\n");
+                            out($f,"#define HANDLE_EXCEPTION() ZEND_ASSERT(EG(exception)); LOAD_OPLINE(); ZEND_VM_CONTINUE()\n");
+                            out($f,"#define HANDLE_EXCEPTION_LEAVE() ZEND_ASSERT(EG(exception)); LOAD_OPLINE(); ZEND_VM_LEAVE()\n");
                             out($f,"#if defined(ZEND_VM_FP_GLOBAL_REG)\n");
                             out($f,"# define ZEND_VM_ENTER_EX()        ZEND_VM_INTERRUPT_CHECK(); ZEND_VM_CONTINUE()\n");
                             out($f,"# define ZEND_VM_ENTER()           execute_data = EG(current_execute_data); LOAD_OPLINE(); ZEND_VM_ENTER_EX()\n");
@@ -1938,8 +1938,8 @@ function gen_executor($f, $skl, $spec, $kind, $executor_name, $initializer_name)
                             out($f,"#define LOAD_NEXT_OPLINE() opline = EX(opline) + 1\n");
                             out($f,"#define SAVE_OPLINE() EX(opline) = opline\n");
                             out($f,"#define SAVE_OPLINE_EX()\n");
-                            out($f,"#define HANDLE_EXCEPTION() LOAD_OPLINE(); ZEND_VM_CONTINUE()\n");
-                            out($f,"#define HANDLE_EXCEPTION_LEAVE() LOAD_OPLINE(); ZEND_VM_LEAVE()\n");
+                            out($f,"#define HANDLE_EXCEPTION() ZEND_ASSERT(EG(exception)); LOAD_OPLINE(); ZEND_VM_CONTINUE()\n");
+                            out($f,"#define HANDLE_EXCEPTION_LEAVE() ZEND_ASSERT(EG(exception)); LOAD_OPLINE(); ZEND_VM_LEAVE()\n");
                             out($f,"#define ZEND_VM_CONTINUE() goto zend_vm_continue\n");
                             out($f,"#define ZEND_VM_RETURN()   return\n");
                             out($f,"#define ZEND_VM_ENTER_EX() ZEND_VM_INTERRUPT_CHECK(); ZEND_VM_CONTINUE()\n");
@@ -1965,11 +1965,11 @@ function gen_executor($f, $skl, $spec, $kind, $executor_name, $initializer_name)
                             out($f,"#define SAVE_OPLINE() EX(opline) = opline\n");
                             out($f,"#define SAVE_OPLINE_EX()\n");
                             if (ZEND_VM_SPEC) {
-                                out($f,"#define HANDLE_EXCEPTION() goto ZEND_HANDLE_EXCEPTION_SPEC_LABEL\n");
-                                out($f,"#define HANDLE_EXCEPTION_LEAVE() goto ZEND_HANDLE_EXCEPTION_SPEC_LABEL\n");
+                                out($f,"#define HANDLE_EXCEPTION() ZEND_ASSERT(EG(exception)); goto ZEND_HANDLE_EXCEPTION_SPEC_LABEL\n");
+                                out($f,"#define HANDLE_EXCEPTION_LEAVE() ZEND_ASSERT(EG(exception)); goto ZEND_HANDLE_EXCEPTION_SPEC_LABEL\n");
                             } else {
-                                out($f,"#define HANDLE_EXCEPTION() goto ZEND_HANDLE_EXCEPTION_LABEL\n");
-                                out($f,"#define HANDLE_EXCEPTION_LEAVE() goto ZEND_HANDLE_EXCEPTION_LABEL\n");
+                                out($f,"#define HANDLE_EXCEPTION() ZEND_ASSERT(EG(exception)); goto ZEND_HANDLE_EXCEPTION_LABEL\n");
+                                out($f,"#define HANDLE_EXCEPTION_LEAVE() ZEND_ASSERT(EG(exception)); goto ZEND_HANDLE_EXCEPTION_LABEL\n");
                             }
                             out($f,"#define ZEND_VM_CONTINUE() goto *(void**)(OPLINE->handler)\n");
                             out($f,"#define ZEND_VM_RETURN()   return\n");