diff options
Diffstat (limited to 'lib/supple/sandbox.lua')
-rw-r--r-- | lib/supple/sandbox.lua | 14 |
1 files changed, 13 insertions, 1 deletions
diff --git a/lib/supple/sandbox.lua b/lib/supple/sandbox.lua index cc1bc6c..f4025bc 100644 --- a/lib/supple/sandbox.lua +++ b/lib/supple/sandbox.lua @@ -24,12 +24,15 @@ local objects = require 'supple.objects' local comms = require 'supple.comms' local luxio = require 'luxio' local sio = require 'luxio.simple' +local track = require 'supple.track' local loadstring = loadstring 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 @@ -152,6 +155,7 @@ local function run() -- Pretend we've "given" the host an object called 'supple:loadstring' -- which is the loadstring/load function + track.start() objects.give(set_limits, "supple:set_limits") objects.give(wrappered_load, "supple:loadstring") objects.give(objects.clean_down, "supple:clean_down") @@ -160,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, } |