summaryrefslogtreecommitdiffhomepage
path: root/mrbgems/mruby-eval
diff options
context:
space:
mode:
authorYukihiro "Matz" Matsumoto <[email protected]>2017-11-10 21:53:12 +0900
committerYukihiro "Matz" Matsumoto <[email protected]>2017-11-10 21:53:12 +0900
commit181f980b6cc5dfa25b270e137c6d060a897b8bf4 (patch)
tree10c9689c867d16ccafa2108f75923bd9154b2ba6 /mrbgems/mruby-eval
parent41c8c419cf7d9cc220a39696e2e498881394352b (diff)
downloadmruby-181f980b6cc5dfa25b270e137c6d060a897b8bf4.tar.gz
mruby-181f980b6cc5dfa25b270e137c6d060a897b8bf4.zip
Need to clear stack region for local variables in eval; fix #3844
Diffstat (limited to 'mrbgems/mruby-eval')
-rw-r--r--mrbgems/mruby-eval/src/eval.c6
1 files changed, 5 insertions, 1 deletions
diff --git a/mrbgems/mruby-eval/src/eval.c b/mrbgems/mruby-eval/src/eval.c
index 997b69e25..14e89ac14 100644
--- a/mrbgems/mruby-eval/src/eval.c
+++ b/mrbgems/mruby-eval/src/eval.c
@@ -273,13 +273,17 @@ create_proc_from_string(mrb_state *mrb, char *s, mrb_int len, mrb_value binding,
static mrb_value
exec_irep(mrb_state *mrb, mrb_value self, struct RProc *proc)
{
+ /* no argument passed from eval() */
+ mrb->c->ci->argc = 0;
if (mrb->c->ci->acc < 0) {
- mrb_value ret = mrb_top_run(mrb, proc, mrb->c->stack[0], 0);
+ mrb_value ret = mrb_top_run(mrb, proc, self, 0);
if (mrb->exc) {
mrb_exc_raise(mrb, mrb_obj_value(mrb->exc));
}
return ret;
}
+ /* clear block */
+ mrb->c->stack[1] = mrb_nil_value();
return mrb_exec_irep(mrb, self, proc);
}