From f7bb8409d6c57b5e9319f4f48d7d02f216b4cc32 Mon Sep 17 00:00:00 2001 From: daurnimator Date: Tue, 23 May 2017 00:05:13 +1000 Subject: src/ldo.js: free CallInfo to recover from (lua) stack overflow --- src/ldo.js | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/ldo.js b/src/ldo.js index fbef68f..cda1274 100644 --- a/src/ldo.js +++ b/src/ldo.js @@ -85,6 +85,10 @@ const luaD_shrinkstack = function(L) { let goodsize = inuse + Math.floor(inuse / 8) + 2*lstate.EXTRA_STACK; if (goodsize > luaconf.LUAI_MAXSTACK) goodsize = luaconf.LUAI_MAXSTACK; /* respect stack limit */ + if (L.stack.length > luaconf.LUAI_MAXSTACK) /* had been handling stack overflow? */ + lstate.luaE_freeCI(L); /* free all CIs (list grew because of an error) */ + /* if thread is currently not handling a stack overflow and its + good size is smaller than current size, shrink its stack */ if (inuse <= (luaconf.LUAI_MAXSTACK - lstate.EXTRA_STACK) && goodsize < L.stack.length) luaD_reallocstack(L, goodsize); }; -- cgit v1.2.3-70-g09d2