【问题标题】:Is there an option to make LuaJIT do bounds checking?有没有让 LuaJIT 做边界检查的选项?
【发布时间】:2015-04-30 20:33:03
【问题描述】:

LuaJIT 知道它定义的 C 类型和数组的长度,但它不检查边界:

ffi = require("ffi")

ten_ints = ffi.typeof("int [10]")
p1 = ten_ints()
print(ffi.sizeof(p1))  -- 40


var_ints = ffi.typeof("int [?]")
p2 = ffi.new(var_ints, 10)
print(ffi.sizeof(p2)) -- 40

p1[1000000] = 1 -- segfault
p2[1000000] = 1 -- segfault

有没有办法让它做到这一点,还是我唯一的选择是编写包装器?

【问题讨论】:

    标签: lua luajit


    【解决方案1】:

    简短回答:没有办法,您必须编写/找到自己的包装器。

    这里是luajit.org的解释

    不要牵手!

    [...] 与常规库不同,FFI 库不提供内存安全 卢阿代码。它会很高兴地允许您取消引用 NULL 指针,以 越界访问数组或错误声明 C 函数。如果你做 一个错误,您的应用程序可能会崩溃,就像等效的 C 代码一样 将。这种行为是不可避免的,因为目标是提供完整的 与 C 代码的互操作性。添加额外的安全措施,例如 边界检查,将是徒劳的。 [...]同样没有办法 推断返回指针的有效索引范围。再次: FFI 库是一个低级库。

    【讨论】:

    • 添加额外的安全措施,如边界检查,将是徒劳的。 -- 如果我只定义 C 结构以提高效率,而从不调用 C 会怎样?无论如何,谢谢你的回答!
    猜你喜欢
    • 1970-01-01
    • 2014-03-09
    • 1970-01-01
    • 2019-10-19
    • 2012-11-13
    • 1970-01-01
    • 2010-10-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多