diff options
-rw-r--r-- | lib/supple/sandbox.lua | 12 | ||||
-rw-r--r-- | src/wrapper.c | 8 |
2 files changed, 18 insertions, 2 deletions
diff --git a/lib/supple/sandbox.lua b/lib/supple/sandbox.lua index bcb2cb8..f4025bc 100644 --- a/lib/supple/sandbox.lua +++ b/lib/supple/sandbox.lua @@ -31,6 +31,8 @@ local load = load local setfenv = setfenv local gc = collectgarbage local unpack = unpack +local xpcall = xpcall +local traceback = debug.traceback local function set_limits(ltab) local count = ltab.count @@ -162,6 +164,14 @@ local function run() return fn(comms._wait) end +local function wrapper_run() + local ok, retcode = xpcall(run, traceback) + if not ok then + error(retcode) + end + return retcode +end + return { - run = run, + run = wrapper_run, } diff --git a/src/wrapper.c b/src/wrapper.c index 7cb52e3..d4f1412 100644 --- a/src/wrapper.c +++ b/src/wrapper.c @@ -68,7 +68,13 @@ main(int argc, char **argv) parg.retcode = 0; success = lua_cpcall(L, &protected_main, &parg); - + + if (success != 0) { + size_t l; + const char *s = lua_tolstring(L, 1, &l); + write(2, s, l); + } + lua_close(L); return ((success == 0) && (parg.retcode == 0)) ? EXIT_SUCCESS : |