From e7828bac4d93d8ef5243a4794e0648a20d41a747 Mon Sep 17 00:00:00 2001 From: dearblue Date: Tue, 10 Oct 2023 21:29:38 +0900 Subject: [PATCH] Fixed unwinding block that could point to invalid PC Switching back from a fiber with an exception could point to an invalid PC. The investigation was inspired by #6060. --- src/vm.c | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/vm.c b/src/vm.c index a32161138..6325b53e1 100644 --- a/src/vm.c +++ b/src/vm.c @@ -2210,14 +2210,13 @@ RETRY_TRY_BLOCK: if (mrb->exc) { L_RAISE: ci = mrb->c->ci; - while ((ch = catch_handler_find(mrb, ci, pc, MRB_CATCH_FILTER_ALL)) == NULL) { + 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) { mrb->jmp = prev_jmp; MRB_THROW(prev_jmp); } - pc = ci[0].pc; } else if (mrb->c == mrb->root_c) { mrb->c->ci->stack = mrb->c->stbase;