From ae8dcb82ba425448b6aa8ebcc7a4c2dd5776b4b3 Mon Sep 17 00:00:00 2001 From: "Yukihiro \"Matz\" Matsumoto" Date: Mon, 11 Dec 2023 23:34:38 +0900 Subject: [PATCH] vm.c: CINFO_SKIP should not be called with `prev_jmp == NULL` We have added assertion to ensure. --- src/vm.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/vm.c b/src/vm.c index 3aae0b2f0..2d2a919c4 100644 --- a/src/vm.c +++ b/src/vm.c @@ -2228,7 +2228,8 @@ RETRY_TRY_BLOCK: while ((ch = catch_handler_find(mrb, ci, ci->pc, MRB_CATCH_FILTER_ALL)) == NULL) { if (ci != mrb->c->cibase) { ci = cipop(mrb); - if (ci[1].cci == CINFO_SKIP && prev_jmp) { + if (ci[1].cci == CINFO_SKIP) { + mrb_assert(prev_jmp != NULL); mrb->jmp = prev_jmp; MRB_THROW(prev_jmp); } @@ -2380,6 +2381,7 @@ RETRY_TRY_BLOCK: } cipop(mrb); if (mrb->c->ci[1].cci != CINFO_NONE) { + mrb_assert(prev_jmp != NULL); mrb->exc = (struct RObject*)break_new(mrb, RBREAK_TAG_BREAK, ci, v); mrb_gc_arena_restore(mrb, ai); mrb->c->vmexec = FALSE;