From 30bdc5e1373e4f186c8dfc371a0a6a3155dadcab Mon Sep 17 00:00:00 2001 From: ndossche <7771979+ndossche@users.noreply.github.com> Date: Tue, 29 Sep 2026 20:08:15 +0200 Subject: [PATCH] Fix GH-23980: ZEND_ASSERT violation @ ZEND_INCLUDE_OR_EVAL (include/eval run with a pending exception) --- Zend/zend_vm_def.h | 6 +++++- Zend/zend_vm_execute.h | 24 ++++++++++++++++++++---- 2 files changed, 25 insertions(+), 5 deletions(-) diff --git a/Zend/zend_vm_def.h b/Zend/zend_vm_def.h index c46b17101546..566c9b4c4563 100644 --- a/Zend/zend_vm_def.h +++ b/Zend/zend_vm_def.h @@ -6585,7 +6585,11 @@ ZEND_VM_HANDLER(73, ZEND_INCLUDE_OR_EVAL, CONST|TMPVAR|CV, ANY, EVAL, SPEC(OBSER } } FREE_OP1(); - ZEND_VM_NEXT_OPCODE(); + if (OP1_TYPE & IS_CONST) { + ZEND_VM_NEXT_OPCODE(); + } else { + ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); + } } ZEND_VM_HANDLER(153, ZEND_UNSET_CV, CV, UNUSED) diff --git a/Zend/zend_vm_execute.h b/Zend/zend_vm_execute.h index f4f35ce2a8a9..2ebbfaa9c05d 100644 --- a/Zend/zend_vm_execute.h +++ b/Zend/zend_vm_execute.h @@ -5306,7 +5306,11 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INCLUDE_OR_EVAL_SPEC_CONST_HAN } } - ZEND_VM_NEXT_OPCODE(); + if (IS_CONST & IS_CONST) { + ZEND_VM_NEXT_OPCODE(); + } else { + ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); + } } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INCLUDE_OR_EVAL_SPEC_OBSERVER_HANDLER(ZEND_OPCODE_HANDLER_ARGS) @@ -5389,7 +5393,11 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INCLUDE_OR_EVAL_SPEC_OBSERVER_ } } FREE_OP(opline->op1_type, opline->op1.var); - ZEND_VM_NEXT_OPCODE(); + if (opline->op1_type & IS_CONST) { + ZEND_VM_NEXT_OPCODE(); + } else { + ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); + } } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FE_RESET_R_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS) @@ -15394,7 +15402,11 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INCLUDE_OR_EVAL_SPEC_TMPVAR_HA } } zval_ptr_dtor_nogc(EX_VAR(opline->op1.var)); - ZEND_VM_NEXT_OPCODE(); + if ((IS_TMP_VAR|IS_VAR) & IS_CONST) { + ZEND_VM_NEXT_OPCODE(); + } else { + ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); + } } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_YIELD_FROM_SPEC_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS) @@ -41213,7 +41225,11 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INCLUDE_OR_EVAL_SPEC_CV_HANDLE } } - ZEND_VM_NEXT_OPCODE(); + if (IS_CV & IS_CONST) { + ZEND_VM_NEXT_OPCODE(); + } else { + ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); + } } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FE_RESET_R_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)