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 drops 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.