Lua's error handling breaks Rust's memory safety
Since Lua utilizes longjmp
for error handling and stack unwinding, any Lua error that crosses a Rust stack frame is going to lead to memory leaks from skipping drop
s and to borrow checker constraints being broken.
The problem is that many Lua functions create errors internally. Some of them cannot be avoided (e.g. OOM), but wherever possible, per-conditions need to be checked such that Lua does not longjmp
.
E.g. a lua.tostring
must be preceded by a lua.isstring
.