Fixed bug: Computation of stack limit

This commit is contained in:
Roberto Ierusalimschy 2020-07-13 13:51:16 -03:00
parent 3b2444f7ee
commit 454424690d
2 changed files with 17 additions and 1 deletions

2
ldo.c
View File

@ -674,7 +674,7 @@ LUA_API int lua_resume (lua_State *L, lua_State *from, int nargs,
if (from == NULL)
L->nCcalls = CSTACKTHREAD;
else /* correct 'nCcalls' for this thread */
L->nCcalls = getCcalls(from) + from->nci - L->nci - CSTACKCF;
L->nCcalls = getCcalls(from) - L->nci - CSTACKCF;
if (L->nCcalls <= CSTACKERR)
return resume_error(L, "C stack overflow", nargs);
luai_userstateresume(L, nargs);

View File

@ -105,6 +105,22 @@ do print("testing stack-overflow in recursive 'gsub'")
print("\tfinal count: ", count)
end
do -- bug in 5.4.0
print("testing limits in coroutines inside deep calls")
count = 0
local lim = 1000
local function stack (n)
progress()
if n > 0 then return stack(n - 1) + 1
else coroutine.wrap(function ()
stack(lim)
end)()
end
end
print(xpcall(stack, function () return "ok" end, lim))
end
do print("testing changes in C-stack limit")