---@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
---@diagnostic disable: undefined-global
-- Create a sandbox environment
local 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
end
end
-- Allow access to standard libraries (safe subset)
sandbox.string = string
sandbox.table = table
sandbox.math = math
sandbox.print = sb_print
sandbox.type = type
sandbox.tostring = tostring
sandbox.tonumber = tonumber
sandbox.pairs = pairs
sandbox.ipairs = ipairs
-- Access to custom functions
sandbox.search = search
sandbox.outline = outline
-- Create a sandboxed version of LuaFileIO
-- local io = {};
--
-- For now we are using unsandboxed io
local io = _G.io;
-- File functions
io.open = sb_io_open
-- Add the sandboxed io library to the sandbox environment
sandbox.io = io
-- Load the script with the sandbox environment
local 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 sandbox
local success, result = pcall(user_script_fn)
if not success then
error("Error executing user script: " .. tostring(result))
end