summaryrefslogtreecommitdiffhomepage
path: root/src/vm.c
diff options
context:
space:
mode:
authorYukihiro "Matz" Matsumoto <[email protected]>2014-05-10 11:14:10 +0900
committerYukihiro "Matz" Matsumoto <[email protected]>2014-05-10 11:14:10 +0900
commit3e2c5da4437f593c6068599e9377d1fbfdfbbfb7 (patch)
tree980f9602e7b1d818bff45e1163e75d51619d80c7 /src/vm.c
parente07a3731d1c7198eb5b443818c0f6a0601ca790d (diff)
parent7dbfe19fc67c60dad3b2347ae64ce13ffb79dbe4 (diff)
downloadmruby-3e2c5da4437f593c6068599e9377d1fbfdfbbfb7.tar.gz
mruby-3e2c5da4437f593c6068599e9377d1fbfdfbbfb7.zip
Merge pull request #2225 from ksss/proc-segv
OP_ENTER fix segmentation fault
Diffstat (limited to 'src/vm.c')
-rw-r--r--src/vm.c15
1 files changed, 9 insertions, 6 deletions
diff --git a/src/vm.c b/src/vm.c
index 620f9e977..2c6fbf087 100644
--- a/src/vm.c
+++ b/src/vm.c
@@ -1306,16 +1306,19 @@ RETRY_TRY_BLOCK:
}
mrb->c->ci->argc = len;
if (argc < len) {
+ int mlen = m2;
+ if (argc < m1+m2) {
+ if (m1 < argc)
+ mlen = argc - m1;
+ else
+ mlen = 0;
+ }
regs[len+1] = *blk; /* move block */
SET_NIL_VALUE(regs[argc+1]);
if (argv0 != argv) {
- value_move(&regs[1], argv, argc-m2); /* m1 + o */
+ value_move(&regs[1], argv, argc-mlen); /* m1 + o */
}
- if (m2) {
- int mlen = m2;
- if (argc-m2 <= m1) {
- mlen = argc - m1;
- }
+ if (mlen) {
value_move(&regs[len-m2+1], &argv[argc-mlen], mlen);
}
if (r) {