summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorYukihiro "Matz" Matsumoto <[email protected]>2017-02-14 00:15:58 +0900
committerYukihiro "Matz" Matsumoto <[email protected]>2017-02-14 00:15:58 +0900
commit719f700adf7598d0ad910dcd3a94aad2ef354033 (patch)
tree5fd9bbe444c517b4fca41ee26ecfcdeb9823492e
parentecb6ac8b4aca56582ebed3e955178a0ad6c77d5d (diff)
downloadmruby-719f700adf7598d0ad910dcd3a94aad2ef354033.tar.gz
mruby-719f700adf7598d0ad910dcd3a94aad2ef354033.zip
Extend mruby stack when keep is bigger than room; fix #3421
But #3421 still cause stack overflow error due to infinite recursion. To prevent overflow, we need to add different stack depth check.
-rw-r--r--src/vm.c3
1 files changed, 3 insertions, 0 deletions
diff --git a/src/vm.c b/src/vm.c
index b89b6d0c5..8bb446fa9 100644
--- a/src/vm.c
+++ b/src/vm.c
@@ -169,6 +169,9 @@ stack_extend_alloc(mrb_state *mrb, int room, int keep)
static inline void
stack_extend(mrb_state *mrb, int room, int keep)
{
+ if (room < keep) {
+ room = keep;
+ }
if (mrb->c->stack + room >= mrb->c->stend) {
stack_extend_alloc(mrb, room, keep);
}