Lua string::byte()在LuaJit 2.1.0-beta3中返回nil

Lua string::byte()在LuaJit 2.1.0-beta3中返回nil,lua,luajit,Lua,Luajit,我在LuaJit 2.1.0-beta2上没有这个问题,但由于种种原因,我不得不更新到beta3。下面的代码在调用“string.char(byte)”的行上生成错误 错误参数#1到'char'(应为数字,得到零) function convert_to_null_terminated_string(数据、偏移量、len) 如果数据:len()

我在LuaJit 2.1.0-beta2上没有这个问题,但由于种种原因,我不得不更新到beta3。下面的代码在调用“string.char(byte)”的行上生成错误

错误参数#1到'char'(应为数字,得到零)

function convert_to_null_terminated_string(数据、偏移量、len)
如果数据:len()<(偏移量+len-1),则
打印(“数据len”。数据:len()…“<(偏移量+len-1)”…(偏移量+len-1))
归零
结束
本地输出={}
对于i=0,len-1 do
本地字节=数据:字节(偏移量+i)
如果字节==0,则中断结束
table.insert(输出,string.char(字节))
结束
返回表.concat(输出“”)
关于string:byte()的文档没有提到函数可能返回nil,我确信在调用string:byte()之前在函数中进行检查时,我在字符串的边界内。

值得一提的是,我使用x64_GC标志编译了LuaJit,以便能够在Lua中分配超过1-2GB的内存。所有代码都在AmazonLinux2主机上基于Ubuntu16的docker映像中运行


看起来我在LuaJit中遇到了一个bug吗?

这个bug可能已经修复了。使用最新版本(来自git HEAD)而不是过时的beta3进行测试。在每次迭代中打印
#数据
偏移量
len
以及打印
i
偏移量+i
,看看到底发生了什么?打印
data:sub(offset+1,offset+1)
也可能有帮助。print()函数从未在问题再现的环境中执行过,因此我假设“data:len()总是>=(offset+len-1)”,并且我不能为每次函数调用都放置print(),因为该函数每天被调用一百万次。局部输出={}是否可能导致nil输出变量?可能是RAM内存耗尽时?@EgorSkriptunoff我看到有v2.1分支。但是LUAJIT_ENABLE_GC64在该分支上不可用。默认情况下,GC64现在已启用。
function convert_to_null_terminated_string(data, offset, len)
  if data:len() < (offset + len - 1) then
      print("Data len " .. data:len() .. " < (offset+len-1) " .. (offset + len - 1))
      return nil
  end
  local output = {}

  for i = 0, len - 1 do
      local byte = data:byte(offset + i)
      if byte == 0 then break end
      table.insert(output, string.char(byte))
  end

  return table.concat(output, "")