From 75ae568236d1b634f48c7922b1416618181c4bf7 Mon Sep 17 00:00:00 2001 From: Yukihiro Matz Matsumoto Date: Sun, 10 Feb 2013 23:54:57 +0900 Subject: should adjust stack size when irep->nregs is larger than allocate size; close #835 --- src/vm.c | 4 ++++ 1 file changed, 4 insertions(+) (limited to 'src') diff --git a/src/vm.c b/src/vm.c index bde38612e..7ad113d3b 100644 --- a/src/vm.c +++ b/src/vm.c @@ -108,6 +108,9 @@ stack_extend(mrb_state *mrb, int room, int keep) size = mrb->stend - mrb->stbase; off = mrb->stack - mrb->stbase; + /* do not leave uninitialized malloc region */ + if (keep > size) keep = size; + /* Use linear stack growth. It is slightly slower than doubling thestack space, but it saves memory on small devices. */ @@ -554,6 +557,7 @@ mrb_run(mrb_state *mrb, struct RProc *proc, mrb_value self) if (!mrb->stack) { stack_init(mrb); } + stack_extend(mrb, irep->nregs, irep->nregs); mrb->ci->proc = proc; mrb->ci->nregs = irep->nregs + 2; regs = mrb->stack; -- cgit v1.2.3