aboutsummaryrefslogtreecommitdiff
path: root/src/lj_api.c
diff options
context:
space:
mode:
authorMike Pall <mike>2023-09-21 04:40:48 +0200
committerMike Pall <mike>2023-09-21 04:40:48 +0200
commita5d2f70c73e406beb617afa829a7af5b8c1d842c (patch)
treecc16d1cc36064e5b752162ba14548a648d6f6082 /src/lj_api.c
parente86990f7f24a94b0897061f25a84547fe1108bed (diff)
downloadluajit-a5d2f70c73e406beb617afa829a7af5b8c1d842c.tar.gz
luajit-a5d2f70c73e406beb617afa829a7af5b8c1d842c.tar.bz2
luajit-a5d2f70c73e406beb617afa829a7af5b8c1d842c.zip
Handle OOM error on stack resize in coroutine.resume and lua_checkstack.
Thanks to Peter Cawley. #1066
Diffstat (limited to 'src/lj_api.c')
-rw-r--r--src/lj_api.c7
1 files changed, 6 insertions, 1 deletions
diff --git a/src/lj_api.c b/src/lj_api.c
index 386bcada..d4048d79 100644
--- a/src/lj_api.c
+++ b/src/lj_api.c
@@ -104,7 +104,12 @@ LUA_API int lua_checkstack(lua_State *L, int size)
104 if (size > LUAI_MAXCSTACK || (L->top - L->base + size) > LUAI_MAXCSTACK) { 104 if (size > LUAI_MAXCSTACK || (L->top - L->base + size) > LUAI_MAXCSTACK) {
105 return 0; /* Stack overflow. */ 105 return 0; /* Stack overflow. */
106 } else if (size > 0) { 106 } else if (size > 0) {
107 lj_state_checkstack(L, (MSize)size); 107 int avail = (int)(mref(L->maxstack, TValue) - L->top);
108 if (size > avail &&
109 lj_state_cpgrowstack(L, (MSize)(size - avail)) != LUA_OK) {
110 L->top--;
111 return 0; /* Out of memory. */
112 }
108 } 113 }
109 return 1; 114 return 1;
110} 115}