diff --git a/Zend/zend_execute.h b/Zend/zend_execute.h index f2cb6764788..d0c18040ab4 100644 --- a/Zend/zend_execute.h +++ b/Zend/zend_execute.h @@ -523,6 +523,12 @@ ZEND_COLD void zend_magic_get_property_type_inconsistency_error(const zend_prope ZEND_COLD void zend_match_unhandled_error(const zval *value); +static zend_always_inline void *zend_get_bad_ptr(void) +{ + ZEND_UNREACHABLE(); + return NULL; +} + END_EXTERN_C() #endif /* ZEND_EXECUTE_H */ diff --git a/Zend/zend_vm_execute.h b/Zend/zend_vm_execute.h index de3457185f4..90f105f611e 100644 --- a/Zend/zend_vm_execute.h +++ b/Zend/zend_vm_execute.h @@ -4491,7 +4491,7 @@ static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_RETURN_BY_REF_SPE break; } - retval_ptr = NULL; + retval_ptr = zend_get_bad_ptr(); if (IS_CONST == IS_VAR) { ZEND_ASSERT(retval_ptr != &EG(uninitialized_zval)); @@ -5209,7 +5209,7 @@ static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FE_RESET_RW_SPEC_ SAVE_OPLINE(); if (IS_CONST == IS_VAR || IS_CONST == IS_CV) { - array_ref = array_ptr = NULL; + array_ref = array_ptr = zend_get_bad_ptr(); if (Z_ISREF_P(array_ref)) { array_ptr = Z_REFVAL_P(array_ref); } @@ -7313,7 +7313,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ADD_ARRAY_ELEMENT_SPEC_CONST_C SAVE_OPLINE(); if ((IS_CONST == IS_VAR || IS_CONST == IS_CV) && UNEXPECTED(opline->extended_value & ZEND_ARRAY_ELEMENT_REF)) { - expr_ptr = NULL; + expr_ptr = zend_get_bad_ptr(); if (Z_ISREF_P(expr_ptr)) { Z_ADDREF_P(expr_ptr); } else { @@ -7670,7 +7670,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_YIELD_SPEC_CONST_CONST_HANDLER } } } else { - zval *value_ptr = NULL; + zval *value_ptr = zend_get_bad_ptr(); /* If a function call result is yielded and the function did * not return by reference we throw a notice. */ @@ -9644,7 +9644,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ADD_ARRAY_ELEMENT_SPEC_CONST_T SAVE_OPLINE(); if ((IS_CONST == IS_VAR || IS_CONST == IS_CV) && UNEXPECTED(opline->extended_value & ZEND_ARRAY_ELEMENT_REF)) { - expr_ptr = NULL; + expr_ptr = zend_get_bad_ptr(); if (Z_ISREF_P(expr_ptr)) { Z_ADDREF_P(expr_ptr); } else { @@ -9951,7 +9951,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_YIELD_SPEC_CONST_TMPVAR_HANDLE } } } else { - zval *value_ptr = NULL; + zval *value_ptr = zend_get_bad_ptr(); /* If a function call result is yielded and the function did * not return by reference we throw a notice. */ @@ -10567,7 +10567,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ADD_ARRAY_ELEMENT_SPEC_CONST_U SAVE_OPLINE(); if ((IS_CONST == IS_VAR || IS_CONST == IS_CV) && UNEXPECTED(opline->extended_value & ZEND_ARRAY_ELEMENT_REF)) { - expr_ptr = NULL; + expr_ptr = zend_get_bad_ptr(); if (Z_ISREF_P(expr_ptr)) { Z_ADDREF_P(expr_ptr); } else { @@ -10794,7 +10794,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_YIELD_SPEC_CONST_UNUSED_HANDLE } } } else { - zval *value_ptr = NULL; + zval *value_ptr = zend_get_bad_ptr(); /* If a function call result is yielded and the function did * not return by reference we throw a notice. */ @@ -12021,7 +12021,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ADD_ARRAY_ELEMENT_SPEC_CONST_C SAVE_OPLINE(); if ((IS_CONST == IS_VAR || IS_CONST == IS_CV) && UNEXPECTED(opline->extended_value & ZEND_ARRAY_ELEMENT_REF)) { - expr_ptr = NULL; + expr_ptr = zend_get_bad_ptr(); if (Z_ISREF_P(expr_ptr)) { Z_ADDREF_P(expr_ptr); } else { @@ -12327,7 +12327,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_YIELD_SPEC_CONST_CV_HANDLER(ZE } } } else { - zval *value_ptr = NULL; + zval *value_ptr = zend_get_bad_ptr(); /* If a function call result is yielded and the function did * not return by reference we throw a notice. */ @@ -19293,7 +19293,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_RETURN_BY_REF_SPEC_TMP_HANDLER break; } - retval_ptr = NULL; + retval_ptr = zend_get_bad_ptr(); if (IS_TMP_VAR == IS_VAR) { ZEND_ASSERT(retval_ptr != &EG(uninitialized_zval)); @@ -19560,7 +19560,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FE_RESET_RW_SPEC_TMP_HANDLER(Z SAVE_OPLINE(); if (IS_TMP_VAR == IS_VAR || IS_TMP_VAR == IS_CV) { - array_ref = array_ptr = NULL; + array_ref = array_ptr = zend_get_bad_ptr(); if (Z_ISREF_P(array_ref)) { array_ptr = Z_REFVAL_P(array_ref); } @@ -20042,7 +20042,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ADD_ARRAY_ELEMENT_SPEC_TMP_CON SAVE_OPLINE(); if ((IS_TMP_VAR == IS_VAR || IS_TMP_VAR == IS_CV) && UNEXPECTED(opline->extended_value & ZEND_ARRAY_ELEMENT_REF)) { - expr_ptr = NULL; + expr_ptr = zend_get_bad_ptr(); if (Z_ISREF_P(expr_ptr)) { Z_ADDREF_P(expr_ptr); } else { @@ -20186,7 +20186,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_YIELD_SPEC_TMP_CONST_HANDLER(Z } } } else { - zval *value_ptr = NULL; + zval *value_ptr = zend_get_bad_ptr(); /* If a function call result is yielded and the function did * not return by reference we throw a notice. */ @@ -20486,7 +20486,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ADD_ARRAY_ELEMENT_SPEC_TMP_TMP SAVE_OPLINE(); if ((IS_TMP_VAR == IS_VAR || IS_TMP_VAR == IS_CV) && UNEXPECTED(opline->extended_value & ZEND_ARRAY_ELEMENT_REF)) { - expr_ptr = NULL; + expr_ptr = zend_get_bad_ptr(); if (Z_ISREF_P(expr_ptr)) { Z_ADDREF_P(expr_ptr); } else { @@ -20630,7 +20630,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_YIELD_SPEC_TMP_TMPVAR_HANDLER( } } } else { - zval *value_ptr = NULL; + zval *value_ptr = zend_get_bad_ptr(); /* If a function call result is yielded and the function did * not return by reference we throw a notice. */ @@ -20947,7 +20947,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ADD_ARRAY_ELEMENT_SPEC_TMP_UNU SAVE_OPLINE(); if ((IS_TMP_VAR == IS_VAR || IS_TMP_VAR == IS_CV) && UNEXPECTED(opline->extended_value & ZEND_ARRAY_ELEMENT_REF)) { - expr_ptr = NULL; + expr_ptr = zend_get_bad_ptr(); if (Z_ISREF_P(expr_ptr)) { Z_ADDREF_P(expr_ptr); } else { @@ -21091,7 +21091,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_YIELD_SPEC_TMP_UNUSED_HANDLER( } } } else { - zval *value_ptr = NULL; + zval *value_ptr = zend_get_bad_ptr(); /* If a function call result is yielded and the function did * not return by reference we throw a notice. */ @@ -21351,7 +21351,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ADD_ARRAY_ELEMENT_SPEC_TMP_CV_ SAVE_OPLINE(); if ((IS_TMP_VAR == IS_VAR || IS_TMP_VAR == IS_CV) && UNEXPECTED(opline->extended_value & ZEND_ARRAY_ELEMENT_REF)) { - expr_ptr = NULL; + expr_ptr = zend_get_bad_ptr(); if (Z_ISREF_P(expr_ptr)) { Z_ADDREF_P(expr_ptr); } else { @@ -21495,7 +21495,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_YIELD_SPEC_TMP_CV_HANDLER(ZEND } } } else { - zval *value_ptr = NULL; + zval *value_ptr = zend_get_bad_ptr(); /* If a function call result is yielded and the function did * not return by reference we throw a notice. */ diff --git a/Zend/zend_vm_gen.php b/Zend/zend_vm_gen.php index 0f6154c64db..79b76538712 100755 --- a/Zend/zend_vm_gen.php +++ b/Zend/zend_vm_gen.php @@ -232,9 +232,9 @@ $op2_get_zval_ptr = array( $op1_get_zval_ptr_ptr = array( "ANY" => "get_zval_ptr_ptr(opline->op1_type, opline->op1, \\1)", - "TMP" => "NULL", + "TMP" => "zend_get_bad_ptr()", "VAR" => "_get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC)", - "CONST" => "NULL", + "CONST" => "zend_get_bad_ptr()", "UNUSED" => "NULL", "CV" => "_get_zval_ptr_cv_\\1(opline->op1.var EXECUTE_DATA_CC)", "TMPVAR" => "???", @@ -243,9 +243,9 @@ $op1_get_zval_ptr_ptr = array( $op2_get_zval_ptr_ptr = array( "ANY" => "get_zval_ptr_ptr(opline->op2_type, opline->op2, \\1)", - "TMP" => "NULL", + "TMP" => "zend_get_bad_ptr()", "VAR" => "_get_zval_ptr_ptr_var(opline->op2.var EXECUTE_DATA_CC)", - "CONST" => "NULL", + "CONST" => "zend_get_bad_ptr()", "UNUSED" => "NULL", "CV" => "_get_zval_ptr_cv_\\1(opline->op2.var EXECUTE_DATA_CC)", "TMPVAR" => "???", @@ -298,9 +298,9 @@ $op2_get_zval_ptr_undef = array( $op1_get_zval_ptr_ptr_undef = array( "ANY" => "get_zval_ptr_ptr_undef(opline->op1_type, opline->op1, \\1)", - "TMP" => "NULL", + "TMP" => "zend_get_bad_ptr()", "VAR" => "_get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC)", - "CONST" => "NULL", + "CONST" => "zend_get_bad_ptr()", "UNUSED" => "NULL", "CV" => "EX_VAR(opline->op1.var)", "TMPVAR" => "???", @@ -309,9 +309,9 @@ $op1_get_zval_ptr_ptr_undef = array( $op2_get_zval_ptr_ptr_undef = array( "ANY" => "get_zval_ptr_ptr_undef(opline->op2_type, opline->op2, \\1)", - "TMP" => "NULL", + "TMP" => "zend_get_bad_ptr()", "VAR" => "_get_zval_ptr_ptr_var(opline->op2.var EXECUTE_DATA_CC)", - "CONST" => "NULL", + "CONST" => "zend_get_bad_ptr()", "UNUSED" => "NULL", "CV" => "EX_VAR(opline->op2.var)", "TMPVAR" => "???", @@ -386,9 +386,9 @@ $op2_get_obj_zval_ptr_deref = array( $op1_get_obj_zval_ptr_ptr = array( "ANY" => "get_obj_zval_ptr_ptr(opline->op1_type, opline->op1, \\1)", - "TMP" => "NULL", + "TMP" => "zend_get_bad_ptr()", "VAR" => "_get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC)", - "CONST" => "NULL", + "CONST" => "zend_get_bad_ptr()", "UNUSED" => "&EX(This)", "CV" => "_get_zval_ptr_cv_\\1(opline->op1.var EXECUTE_DATA_CC)", "TMPVAR" => "???", @@ -397,9 +397,9 @@ $op1_get_obj_zval_ptr_ptr = array( $op2_get_obj_zval_ptr_ptr = array( "ANY" => "get_obj_zval_ptr_ptr(opline->op2_type, opline->op2, \\1)", - "TMP" => "NULL", + "TMP" => "zend_get_bad_ptr()", "VAR" => "_get_zval_ptr_ptr_var(opline->op2.var EXECUTE_DATA_CC)", - "CONST" => "NULL", + "CONST" => "zend_get_bad_ptr()", "UNUSED" => "&EX(This)", "CV" => "_get_zval_ptr_cv_\\1(opline->op2.var EXECUTE_DATA_CC)", "TMPVAR" => "???", @@ -408,9 +408,9 @@ $op2_get_obj_zval_ptr_ptr = array( $op1_get_obj_zval_ptr_ptr_undef = array( "ANY" => "get_obj_zval_ptr_ptr(opline->op1_type, opline->op1, \\1)", - "TMP" => "NULL", + "TMP" => "zend_get_bad_ptr()", "VAR" => "_get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC)", - "CONST" => "NULL", + "CONST" => "zend_get_bad_ptr()", "UNUSED" => "&EX(This)", "CV" => "EX_VAR(opline->op1.var)", "TMPVAR" => "???", @@ -419,9 +419,9 @@ $op1_get_obj_zval_ptr_ptr_undef = array( $op2_get_obj_zval_ptr_ptr_undef = array( "ANY" => "get_obj_zval_ptr_ptr(opline->op2_type, opline->op2, \\1)", - "TMP" => "NULL", + "TMP" => "zend_get_bad_ptr()", "VAR" => "_get_zval_ptr_ptr_var(opline->op2.var EXECUTE_DATA_CC)", - "CONST" => "NULL", + "CONST" => "zend_get_bad_ptr()", "UNUSED" => "&EX(This)", "CV" => "EX_VAR(opline->op2.var)", "TMPVAR" => "???", @@ -518,9 +518,9 @@ $op_data_get_zval_ptr_deref = array( $op_data_get_zval_ptr_ptr = array( "ANY" => "get_zval_ptr_ptr((opline+1)->op1_type, (opline+1)->op1, \\1)", - "TMP" => "NULL", + "TMP" => "zend_get_bad_ptr()", "VAR" => "_get_zval_ptr_ptr_var((opline+1)->op1.var EXECUTE_DATA_CC)", - "CONST" => "NULL", + "CONST" => "zend_get_bad_ptr()", "UNUSED" => "NULL", "CV" => "_get_zval_ptr_cv_\\1((opline+1)->op1.var EXECUTE_DATA_CC)", "TMPVAR" => "???",