summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDaniel Silverstone <daniel.silverstone@codethink.co.uk>2012-08-13 17:28:15 +0100
committerDaniel Silverstone <daniel.silverstone@codethink.co.uk>2012-08-13 17:28:15 +0100
commitf6e8301932ce1bb1c059826ded8807e7f8cdfc79 (patch)
tree23128227b42d184ef0a884c9a146e4bef7930854
parent57b49e99ece40f7617959b01438539dbdf0e8f06 (diff)
downloadsupple-f6e8301932ce1bb1c059826ded8807e7f8cdfc79.tar.gz
SANDBOX: Update sandbox and wrapper so that we write to stderr (dead, but who cares) if an error propagates all the way out
-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 :