luajit2
luajit2 copied to clipboard
unexpected index -1 comes up when copy a table with only one element
For me, this bug happens in my company computer resty
command (Intel(R) Celeron(R) J4125 8GB ram win10x64 + wsl2 ubuntu 20.04+openresty 1.21.4 install from official apt)
It should be a luajit related bug because when I turn jit off for resty, there's no bug:
for ((i=1; i<=500; i++)); do resty -joff test.lua; done
BUG machine info:
设备名称 DESKTOP-S3UK088 处理器 Intel(R) Celeron(R) J4125 CPU @ 2.00GHz 2.00 GHz 机带 RAM 8.00 GB (7.85 GB 可用)
test.lua
local function jcopy(o)
local function copy(v)
if type(v) == "table" then
local cv = {}
for key, value in pairs(v) do
if key == -1 then
error(tostring(key))
end
cv[key] = copy(value)
end
return cv
else
return v
end
end
return copy(o)
end
local function main()
local n = 0
for i = 1, 100, 1 do
local c = jcopy { cond = { { "you shouldn't see this via index -1" } } }
if c.cond[-1] then
if n == 0 then
-- print for the first time
print(c.cond[-1][1])
end
n = n + 1
end
end
if n > 0 then
print("-1 index happends:" .. n)
end
end
main()
then run test.lua
500 times
for ((i=1; i<=500; i++)); do resty test.lua; done
you will get output like:
root@DESKTOP-S3UK088:~/rsks# for ((i=1; i<=50; i++))
> do
> resty test.lua
> done
you shouldn't see this via index -1
-1 index happends:77
you shouldn't see this via index -1
-1 index happends:29
you shouldn't see this via index -1
-1 index happends:8
you shouldn't see this via index -1
-1 index happends:6
you shouldn't see this via index -1
-1 index happends:38
But you shouldn't see any output if the copy work as expected. this is the minimal repo: https://github.com/xiangnanscu/luajit-bug