diff options
-rw-r--r-- | src/lj_state.c | 13 |
1 files changed, 11 insertions, 2 deletions
diff --git a/src/lj_state.c b/src/lj_state.c index 275dde44..2164b900 100644 --- a/src/lj_state.c +++ b/src/lj_state.c | |||
@@ -94,9 +94,18 @@ void lj_state_shrinkstack(lua_State *L, MSize used) | |||
94 | /* Try to grow stack. */ | 94 | /* Try to grow stack. */ |
95 | void LJ_FASTCALL lj_state_growstack(lua_State *L, MSize need) | 95 | void LJ_FASTCALL lj_state_growstack(lua_State *L, MSize need) |
96 | { | 96 | { |
97 | if (L->stacksize > LJ_STACK_MAXEX) /* overflow while handling overflow? */ | 97 | MSize n; |
98 | if (L->stacksize > LJ_STACK_MAXEX) /* Overflow while handling overflow? */ | ||
98 | lj_err_throw(L, LUA_ERRERR); | 99 | lj_err_throw(L, LUA_ERRERR); |
99 | resizestack(L, L->stacksize + (need > L->stacksize ? need : L->stacksize)); | 100 | n = L->stacksize + need; |
101 | if (n > LJ_STACK_MAX) { | ||
102 | n += 2*LUA_MINSTACK; | ||
103 | } else if (n < 2*L->stacksize) { | ||
104 | n = 2*L->stacksize; | ||
105 | if (n >= LJ_STACK_MAX) | ||
106 | n = LJ_STACK_MAX; | ||
107 | } | ||
108 | resizestack(L, n); | ||
100 | if (L->stacksize > LJ_STACK_MAXEX) | 109 | if (L->stacksize > LJ_STACK_MAXEX) |
101 | lj_err_msg(L, LJ_ERR_STKOV); | 110 | lj_err_msg(L, LJ_ERR_STKOV); |
102 | } | 111 | } |