summaryrefslogtreecommitdiffhomepage
path: root/src/vm.c
diff options
context:
space:
mode:
authorYukihiro "Matz" Matsumoto <[email protected]>2018-12-10 10:23:01 +0900
committerYukihiro "Matz" Matsumoto <[email protected]>2018-12-10 10:23:01 +0900
commitc23e68d32b8913f35e344844805d1b80f5633ecd (patch)
tree8c1c905d5555588e476852ffcfb4a8b415a7a84a /src/vm.c
parente6bad6766a8ddc00c23b1c0204b047dfbf8e3041 (diff)
downloadmruby-c23e68d32b8913f35e344844805d1b80f5633ecd.tar.gz
mruby-c23e68d32b8913f35e344844805d1b80f5633ecd.zip
Need to clear stack before invoking a block; fix #4181
Diffstat (limited to 'src/vm.c')
-rw-r--r--src/vm.c5
1 files changed, 3 insertions, 2 deletions
diff --git a/src/vm.c b/src/vm.c
index 84e076ee8..b5249b325 100644
--- a/src/vm.c
+++ b/src/vm.c
@@ -667,10 +667,11 @@ eval_under(mrb_state *mrb, mrb_value self, mrb_value blk, struct RClass *c)
return MRB_PROC_CFUNC(p)(mrb, self);
}
nregs = p->body.irep->nregs;
- mrb_stack_extend(mrb, (nregs < 3) ? 3 : nregs);
+ if (nregs < 3) nregs = 3;
+ mrb_stack_extend(mrb, nregs);
mrb->c->stack[0] = self;
mrb->c->stack[1] = self;
- mrb->c->stack[2] = mrb_nil_value();
+ stack_clear(mrb->c->stack+2, nregs-2);
ci = cipush(mrb);
ci->target_class = 0;
ci->pc = p->body.irep->iseq;