mirror of
https://github.com/kikito/lua-sandbox.git
synced 2024-12-18 03:04:20 +00:00
accepts limit param
This commit is contained in:
parent
ea90a3c971
commit
57a914f082
12
sandbox.lua
12
sandbox.lua
@ -54,7 +54,11 @@ local function cleanup()
|
|||||||
end
|
end
|
||||||
|
|
||||||
local function run(f, options)
|
local function run(f, options)
|
||||||
if type(f) == 'string' then f = loadstring(f) end
|
if type(f) == 'string' then f = assert(loadstring(f)) end
|
||||||
|
|
||||||
|
options = options or {}
|
||||||
|
|
||||||
|
local limit = options.limit or 500000
|
||||||
|
|
||||||
setfenv(f, BASE_ENV)
|
setfenv(f, BASE_ENV)
|
||||||
|
|
||||||
@ -65,8 +69,8 @@ local function run(f, options)
|
|||||||
local step = 1
|
local step = 1
|
||||||
local count = 0
|
local count = 0
|
||||||
local timeout = function(str)
|
local timeout = function(str)
|
||||||
count = count + step
|
count = count + 1
|
||||||
if count >= 500000 then
|
if count >= limit then
|
||||||
cleanup()
|
cleanup()
|
||||||
error('Timeout')
|
error('Timeout')
|
||||||
end
|
end
|
||||||
@ -87,4 +91,4 @@ end
|
|||||||
local sandbox = { run = run }
|
local sandbox = { run = run }
|
||||||
|
|
||||||
|
|
||||||
return setmetatable(sandbox, {__call = function(_,f) return run(f) end})
|
return setmetatable(sandbox, {__call = function(_,f,o) return run(f,o) end})
|
||||||
|
@ -38,10 +38,16 @@ describe('sandbox', function()
|
|||||||
assert.equal('hellohello', string.rep('hello', 2))
|
assert.equal('hellohello', string.rep('hello', 2))
|
||||||
end)
|
end)
|
||||||
|
|
||||||
it('#focus throws an error with infinite loops', function()
|
|
||||||
|
describe('when handling infinite loops', function()
|
||||||
|
it('throws an error with infinite loops', function()
|
||||||
assert.has_error(function() sandbox("while true do end") end)
|
assert.has_error(function() sandbox("while true do end") end)
|
||||||
end)
|
end)
|
||||||
|
|
||||||
|
it('#focus accepts a limit param', function()
|
||||||
|
--assert.no_has_error(function() sandbox("for i=1,10000 do end") end)
|
||||||
|
assert.has_error(function() sandbox("for i=1,10000 do end", {limit = 50}) end)
|
||||||
|
end)
|
||||||
|
end)
|
||||||
|
|
||||||
end)
|
end)
|
||||||
|
Loading…
Reference in New Issue
Block a user