2015-04-30 3 views
4

LuaJIT знает типы C определяет и длины массивов, но не проверяет границы:Есть ли возможность сделать проверку LuaJIT границей?

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 

Есть ли способ сделать это делать, или это мой единственный выбор, чтобы написать фантики?

ответ

4

Короткий ответ: нет способа, вам придется написать/найти свою собственную упаковку.

Вот объяснение от luajit.org

Нет Ручной удерживающей!

[...] Библиотека FFI не обеспечивает безопасность памяти, в отличие от обычного Код Lua. Он с радостью позволит вам разыменовать указатель NULL, до доступа к массивам за пределами границ или для неверного определения функций C. Если вы допустили ошибку , ваше приложение может столкнуться с ошибкой, так же как и код C . Такое поведение неизбежно, поскольку цель состоит в обеспечении полной совместимости с кодом C . Добавление дополнительных мер безопасности, таких как , проверяет границы, было бы бесполезно. [...] Точно так же нет никакого способа для вывести допустимый диапазон индексов для возвращаемого указателя. Опять же: библиотека FFI представляет собой библиотеку низкого уровня.

+0

* Добавление дополнительных мер безопасности, таких как проверки границ, было бы бесполезным. * - что, если я просто определяю C-структуры для эффективности и никогда не называю C? В любом случае, спасибо за ответ! – MaxB

 Смежные вопросы

  • Нет связанных вопросов^_^