summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--lib/supple/sandbox.lua12
-rw-r--r--src/wrapper.c8
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 :