summaryrefslogtreecommitdiffhomepage
path: root/src
diff options
context:
space:
mode:
authorBouke van der Bijl <[email protected]>2016-11-29 10:54:21 -0500
committerBouke van der Bijl <[email protected]>2016-12-01 15:23:31 -0500
commit7d07466b437910d560fda2f78d2f7b93205eaa22 (patch)
treebb18500df0dddad6a37af11e4872236b26def189 /src
parent2cca9d368815e9c83a7489c40d69937d68cb43a2 (diff)
downloadmruby-7d07466b437910d560fda2f78d2f7b93205eaa22.tar.gz
mruby-7d07466b437910d560fda2f78d2f7b93205eaa22.zip
Fix stack move segfaulting in OP_ARYCAT
Reported by https://hackerone.com/haquaman Testcase (couldn't get it to work as a test): def nil.b b *nil end nil.b
Diffstat (limited to 'src')
-rw-r--r--src/vm.c4
1 files changed, 2 insertions, 2 deletions
diff --git a/src/vm.c b/src/vm.c
index 41e19b0c0..f0dc338d0 100644
--- a/src/vm.c
+++ b/src/vm.c
@@ -2134,8 +2134,8 @@ RETRY_TRY_BLOCK:
CASE(OP_ARYCAT) {
/* A B mrb_ary_concat(R(A),R(B)) */
- mrb_ary_concat(mrb, regs[GETARG_A(i)],
- mrb_ary_splat(mrb, regs[GETARG_B(i)]));
+ mrb_value splat = mrb_ary_splat(mrb, regs[GETARG_B(i)]);
+ mrb_ary_concat(mrb, regs[GETARG_A(i)], splat);
ARENA_RESTORE(mrb, ai);
NEXT;
}