diff options
author | Roberto Ierusalimschy <roberto@inf.puc-rio.br> | 2022-05-25 17:41:39 -0300 |
---|---|---|
committer | Roberto Ierusalimschy <roberto@inf.puc-rio.br> | 2022-05-25 17:41:39 -0300 |
commit | 196bb94d66e727e0aec053a0276c3ad701500762 (patch) | |
tree | a7639f32207179b5bd5e1ce04dd35972e1b2e148 /testes/locals.lua | |
parent | 603b2c64add5fbf4b7343525cf109af0c7077695 (diff) | |
download | lua-github-196bb94d66e727e0aec053a0276c3ad701500762.tar.gz |
Bug: 'lua_settop' may use an invalid pointer to stack
Diffstat (limited to 'testes/locals.lua')
-rw-r--r-- | testes/locals.lua | 22 |
1 files changed, 22 insertions, 0 deletions
diff --git a/testes/locals.lua b/testes/locals.lua index 62a88df5..ddb75054 100644 --- a/testes/locals.lua +++ b/testes/locals.lua @@ -592,6 +592,28 @@ end if rawget(_G, "T") then + do + -- bug in 5.4.3 + -- 'lua_settop' may use a pointer to stack invalidated by 'luaF_close' + + -- reduce stack size + collectgarbage(); collectgarbage(); collectgarbage() + + -- force a stack reallocation + local function loop (n) + if n < 400 then loop(n + 1) end + end + + -- close metamethod will reallocate the stack + local o = setmetatable({}, {__close = function () loop(0) end}) + + local script = [[toclose 2; settop 1; return 1]] + + assert(T.testC(script, o) == script) + + end + + -- memory error inside closing function local function foo () local y <close> = func2close(function () T.alloccount() end) |