From f6e8301932ce1bb1c059826ded8807e7f8cdfc79 Mon Sep 17 00:00:00 2001 From: Daniel Silverstone Date: Mon, 13 Aug 2012 17:28:15 +0100 Subject: SANDBOX: Update sandbox and wrapper so that we write to stderr (dead, but who cares) if an error propagates all the way out --- lib/supple/sandbox.lua | 12 +++++++++++- 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 : -- cgit v1.2.1