'lua_State.nci' must be an integer

Lua can easily overflow an unsigned short counting nested calls.
(The limit to this value is the maximum stack size, LUAI_MAXSTACK,
which is currently 1e6.)
This commit is contained in:
Roberto Ierusalimschy
2025-02-26 11:31:10 -03:00
parent ceac82f78b
commit f9e35627ed
3 changed files with 18 additions and 3 deletions

View File

@@ -127,6 +127,18 @@ assert(#a == 22 and a[#a] == 79)
x, a = nil
do -- "bug" in 5.4.2
local function foo () foo () end -- just create a stack overflow
local co = coroutine.create(foo)
-- running this coroutine would overflow the unsigned short 'nci', the
-- counter of CallInfo structures available to the thread.
-- (The issue only manifests in an 'assert'.)
local st, msg = coroutine.resume(co)
assert(string.find(msg, "stack overflow"))
assert(coroutine.status(co) == "dead")
end
print("to-be-closed variables in coroutines")
local function func2close (f)