diff options
| author | Yukihiro "Matz" Matsumoto <[email protected]> | 2017-11-11 17:55:32 +0900 |
|---|---|---|
| committer | Yukihiro "Matz" Matsumoto <[email protected]> | 2017-11-11 17:55:32 +0900 |
| commit | c210a8adf9e558e96258de4865bf0c68d9da52f8 (patch) | |
| tree | 7cafab6e30dc429f8357f3adde4a4398a79b6b8f /src/vm.c | |
| parent | 181f980b6cc5dfa25b270e137c6d060a897b8bf4 (diff) | |
| download | mruby-c210a8adf9e558e96258de4865bf0c68d9da52f8.tar.gz mruby-c210a8adf9e558e96258de4865bf0c68d9da52f8.zip | |
Fixed wrong stack extend size; fix #3847
Diffstat (limited to 'src/vm.c')
| -rw-r--r-- | src/vm.c | 8 |
1 files changed, 5 insertions, 3 deletions
@@ -502,11 +502,11 @@ mrb_exec_irep(mrb_state *mrb, mrb_value self, struct RProc *p) ci->nregs = p->body.irep->nregs; if (ci->argc < 0) keep = 3; else keep = ci->argc + 1; - if (ci->argc < keep) { + if (ci->nregs < keep) { stack_extend(mrb, keep); } else { - stack_extend(mrb, ci->argc); + stack_extend(mrb, ci->nregs); stack_clear(mrb->c->stack+keep, ci->nregs-keep); } @@ -1015,7 +1015,9 @@ RETRY_TRY_BLOCK: CASE(OP_LOADI) { /* A sBx R(A) := sBx */ - SET_INT_VALUE(regs[GETARG_A(i)], GETARG_sBx(i)); + int a = GETARG_A(i); + mrb_int bx = GETARG_sBx(i); + SET_INT_VALUE(regs[a], bx); NEXT; } |
