[Date Prev][Date Next][Thread Prev][Thread Next]
[Date Index]
[Thread Index]
- Subject: Preventing Lua scripts that never return from freezing the host	application
 
- From: Christian Tellefsen <christian.tellefsen@...>
 
- Date: Tue, 03 Nov 2009 16:46:09 +0100
 
Hello all!
Since this is my first post here, I'll just have to start by saying 
thanks to everyone who has been working on Lua. I started using Lua a 
few months back, and so far it's been a joy. I think it's a very elegant 
language. Thank you!
I'm investigating using Lua as a scripting language for content 
designers. If I want to make sure that none of the designer-supplied 
scripts can loop forever and freeze the host application, how would I do 
that?
Sample problem code:
f = coroutine.create(function() while true do print('x') end end) -- No 
yield()
coroutine.resume(f) -- Oh no
Some possible solutions I'm looking at:
- Change the interpreter, so that it returns an error if we've spent too 
much time / done too many operations.
- Run Lua in a separate thread and somehow stop it if it takes too long.
- Wrap f in code that calls yield(), and disallow bytecode in f that 
contains loops or backwards jumps. This would of course greatly limit 
what can be in a script. Something like this:
mycode.create = function(f)
assert(mycode.checknoloops(f))
return coroutine.create(function() f() coroutine.yield() end)
end
- Alternatively, don't fix it in code, just spend some time on teaching 
the content designers to write their scripts right.
If you have any suggestions or experience on how to best attack this 
problem, I'd be grateful.
Cheers,
Christian.