diff options
| author | Yukihiro "Matz" Matsumoto <[email protected]> | 2018-12-10 10:23:01 +0900 |
|---|---|---|
| committer | Yukihiro "Matz" Matsumoto <[email protected]> | 2018-12-10 10:23:01 +0900 |
| commit | c23e68d32b8913f35e344844805d1b80f5633ecd (patch) | |
| tree | 8c1c905d5555588e476852ffcfb4a8b415a7a84a /src | |
| parent | e6bad6766a8ddc00c23b1c0204b047dfbf8e3041 (diff) | |
| download | mruby-c23e68d32b8913f35e344844805d1b80f5633ecd.tar.gz mruby-c23e68d32b8913f35e344844805d1b80f5633ecd.zip | |
Need to clear stack before invoking a block; fix #4181
Diffstat (limited to 'src')
| -rw-r--r-- | src/vm.c | 5 |
1 files changed, 3 insertions, 2 deletions
@@ -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; |
