diff --git a/3rd/lua/lauxlib.c b/3rd/lua/lauxlib.c index 63387b7b..fa775d47 100644 --- a/3rd/lua/lauxlib.c +++ b/3rd/lua/lauxlib.c @@ -1175,6 +1175,7 @@ LUALIB_API int luaL_loadfilex (lua_State *L, const char *filename, } luaS_expandshr(4096); int err = luaL_loadfilex_(eL, filename, mode); + luaS_expandshr(-4096); if (err != LUA_OK) { size_t sz = 0; const char * msg = lua_tolstring(eL, -1, &sz); diff --git a/3rd/lua/lstring.c b/3rd/lua/lstring.c index 68de011d..b0593436 100644 --- a/3rd/lua/lstring.c +++ b/3rd/lua/lstring.c @@ -544,8 +544,13 @@ internshrstr (lua_State *L, const char *str, size_t l) { LUA_API void luaS_expandshr(int n) { struct shrmap * s = &SSM; - if (s->n < n) { - ATOM_ADD(&s->n, n); + if (n < 0) { + if (-n > s->n) { + n = -s->n; + } + } + ATOM_ADD(&s->n, n); + if (n > 0) { int t = (s->total + s->n) * 5 / 4; if (t > s->mask) { shrstr_expandpage(t);