55 lines · 1.5 KB · Lua
RawDownload
---@diagnostic disable: undefined-global -- Create a sandbox environmentlocal sandbox = {} -- For now, add all globals to `sandbox` (so there effectively is no sandbox).-- We still need the logic below so that we can do things like overriding print() to write-- to our in-memory log rather than to stdout, we will delete this loop (and re-enable-- the I/O module being sandboxed below) to have things be sandboxed again.for k, v in pairs(_G) do    if sandbox[k] == nil then        sandbox[k] = v    endend -- Allow access to standard libraries (safe subset)sandbox.string = stringsandbox.table = tablesandbox.math = mathsandbox.print = sb_printsandbox.type = typesandbox.tostring = tostringsandbox.tonumber = tonumbersandbox.pairs = pairssandbox.ipairs = ipairs -- Access to custom functionssandbox.search = searchsandbox.outline = outline -- Create a sandboxed version of LuaFileIO-- local io = {};---- For now we are using unsandboxed iolocal io = _G.io; -- File functionsio.open = sb_io_open -- Add the sandboxed io library to the sandbox environmentsandbox.io = io -- Load the script with the sandbox environmentlocal user_script_fn, err = load(user_script, nil, "t", sandbox) if not user_script_fn then    error("Failed to load user script: " .. tostring(err))end -- Execute the user script within the sandboxlocal success, result = pcall(user_script_fn) if not success then    error("Error executing user script: " .. tostring(result))end