1 Development Notes
Lucas Schwiderski edited this page 2025-05-12 17:01:22 +02:00

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.