summaryrefslogtreecommitdiffhomepage
path: root/src
diff options
context:
space:
mode:
authorYukihiro "Matz" Matsumoto <[email protected]>2017-07-05 09:19:06 +0900
committerYukihiro "Matz" Matsumoto <[email protected]>2017-07-05 09:19:06 +0900
commitbd66c5d716eed470957a90bd2851292165550ee1 (patch)
treedf7f686105677db7625c9ed2b3d38ae2501f5ac0 /src
parentcc01dedc656e77f2b81902fe703537e39776a6ca (diff)
downloadmruby-bd66c5d716eed470957a90bd2851292165550ee1.tar.gz
mruby-bd66c5d716eed470957a90bd2851292165550ee1.zip
Check stack size before accessing env stack; fix #3727
Diffstat (limited to 'src')
-rw-r--r--src/vm.c3
1 files changed, 2 insertions, 1 deletions
diff --git a/src/vm.c b/src/vm.c
index 4fca2b2ac..8a7627508 100644
--- a/src/vm.c
+++ b/src/vm.c
@@ -2156,7 +2156,8 @@ RETRY_TRY_BLOCK:
else {
struct REnv *e = uvenv(mrb, lv-1);
if (!e || e->cioff == 0 ||
- (!MRB_ENV_STACK_SHARED_P(e) && e->cxt.mid == 0)) {
+ (!MRB_ENV_STACK_SHARED_P(e) && e->cxt.mid == 0) ||
+ MRB_ENV_STACK_LEN(e) <= m1+r+m2+1) {
localjump_error(mrb, LOCALJUMP_ERROR_YIELD);
goto L_RAISE;
}