summaryrefslogtreecommitdiffhomepage
path: root/src
diff options
context:
space:
mode:
authorYukihiro "Matz" Matsumoto <[email protected]>2017-05-25 14:12:16 +0900
committerYukihiro "Matz" Matsumoto <[email protected]>2017-05-25 14:12:16 +0900
commite0931126ffcfd13af42c0a7ce4a37cc73f4223da (patch)
treeb01196d9e2a7d341ad38e7e4e35a129235c7b15e /src
parente969229b77b9c3b1f6ff4de7d9ce6d15586a9c15 (diff)
downloadmruby-e0931126ffcfd13af42c0a7ce4a37cc73f4223da.tar.gz
mruby-e0931126ffcfd13af42c0a7ce4a37cc73f4223da.zip
Check env stack length before `OP_SETUPVAR`; ref #3643
Diffstat (limited to 'src')
-rw-r--r--src/vm.c7
1 files changed, 5 insertions, 2 deletions
diff --git a/src/vm.c b/src/vm.c
index 10c711a49..b3e06cb54 100644
--- a/src/vm.c
+++ b/src/vm.c
@@ -1084,8 +1084,11 @@ RETRY_TRY_BLOCK:
if (e) {
mrb_value *regs_a = regs + GETARG_A(i);
int idx = GETARG_B(i);
- e->stack[idx] = *regs_a;
- mrb_write_barrier(mrb, (struct RBasic*)e);
+
+ if (idx < MRB_ENV_STACK_LEN(e)) {
+ e->stack[idx] = *regs_a;
+ mrb_write_barrier(mrb, (struct RBasic*)e);
+ }
}
NEXT;
}