summaryrefslogtreecommitdiffhomepage
path: root/src
diff options
context:
space:
mode:
authorYukihiro "Matz" Matsumoto <[email protected]>2017-03-04 18:55:19 +0900
committerYukihiro "Matz" Matsumoto <[email protected]>2017-03-04 18:56:20 +0900
commit3b40a2f6b56d9c81b7673cc50121a56ebf7dc8bd (patch)
tree9ce378c988b4297a47a350a2228ab09a996b8599 /src
parentecee8c51b0ad8cddd9e422a3e5105f902d7e2781 (diff)
downloadmruby-3b40a2f6b56d9c81b7673cc50121a56ebf7dc8bd.tar.gz
mruby-3b40a2f6b56d9c81b7673cc50121a56ebf7dc8bd.zip
Limit ecall() recursion levels; fix #3466
Diffstat (limited to 'src')
-rw-r--r--src/vm.c3
1 files changed, 3 insertions, 0 deletions
diff --git a/src/vm.c b/src/vm.c
index 251ee15bc..012499610 100644
--- a/src/vm.c
+++ b/src/vm.c
@@ -292,6 +292,9 @@ ecall(mrb_state *mrb, int i)
ptrdiff_t nstk;
if (i<0) return;
+ if (mrb->c->ci - mrb->c->cibase > MRB_FUNCALL_DEPTH_MAX) {
+ mrb_exc_raise(mrb, mrb_obj_value(mrb->stack_err));
+ }
p = mrb->c->ensure[i];
if (!p) return;
if (mrb->c->ci->eidx > i)