From 6975258efd567c58e483818189216d43b6d77036 Mon Sep 17 00:00:00 2001 From: "Yukihiro \"Matz\" Matsumoto" Date: Wed, 6 Dec 2017 17:20:34 +0900 Subject: The proc with top-level env must be 'proc-closure'; fix #3871 --- src/vm.c | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) (limited to 'src/vm.c') diff --git a/src/vm.c b/src/vm.c index f8c2d510f..7edbdf3cb 100644 --- a/src/vm.c +++ b/src/vm.c @@ -2019,8 +2019,15 @@ RETRY_TRY_BLOCK: if (!MRB_PROC_ENV_P(proc) || !MRB_ENV_STACK_SHARED_P(MRB_PROC_ENV(proc))) { goto L_BREAK_ERROR; } - if (MRB_PROC_ENV(proc)->cxt != mrb->c) { - goto L_BREAK_ERROR; + else { + struct REnv *e = MRB_PROC_ENV(proc); + + if (e == mrb->c->cibase->env && proc != mrb->c->cibase->proc) { + goto L_BREAK_ERROR; + } + if (e->cxt != mrb->c) { + goto L_BREAK_ERROR; + } } while (mrb->c->eidx > mrb->c->ci->epos) { ecall_adjust(); -- cgit v1.2.3