AB
Lua->call("loadstring",$usercode);
Проблема пока в том, что в loadstring не получается передать кастомный _ENV
Size: a a a
AB
Lua->call("loadstring",$usercode);
AB
$lua = new Lua();
$lua->eval(/** @lang Lua */ <<<LUA
function sandbox(code)
local scope = loadstring(code)
local userEnv = {
loadstring = loadstring,
print = print,
pairs = pairs,
}
userEnv._G = userEnv
setfenv(scope, userEnv) -- для >= 5.2 нужен полифилл
return scope()
end
LUA);
$userCode = /** @lang Lua */ <<<LUA
for k in pairs(_ENV) do
print(k, "\\n")
end
LUA;
echo $lua->call('sandbox', [$userCode]);
S
AB
S
local str = [[
многострочная
строка
]]
local str = [=[
многострочная строка
с [[двойными скобками]] внутри
]=]
АК
AB
local str = [[
многострочная
строка
]]
local str = [=[
многострочная строка
с [[двойными скобками]] внутри
]=]
AB
&sandboxcode = <<<EOD
...
do
local _ENV = userenv
loadstring[====[$usercode]====]()
end
EOD;
Потом эвалишь это дело.S
AB
S
AY
CP
а
CP