diff options
author | Daniel Silverstone <daniel.silverstone@codethink.co.uk> | 2012-08-13 17:28:15 +0100 |
---|---|---|
committer | Daniel Silverstone <daniel.silverstone@codethink.co.uk> | 2012-08-13 17:28:15 +0100 |
commit | f6e8301932ce1bb1c059826ded8807e7f8cdfc79 (patch) | |
tree | 23128227b42d184ef0a884c9a146e4bef7930854 | |
parent | 57b49e99ece40f7617959b01438539dbdf0e8f06 (diff) | |
download | supple-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.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 : |