[Date Prev][Date Next][Thread Prev][Thread Next]
[Date Index]
[Thread Index]
- Subject: Re: Using debugging hooks as a 'watchdog' on code execution?
- From: "W. C. Bubel" <inmatarian@...>
- Date: Sat, 5 Jan 2008 11:59:22 -0500
On Jan 4, 2008 12:26 AM, Kurt Nordstrom <kurt@blar.net> wrote:
> However, I am looking for a way to put limits on the code that users can
> run. Namely, I don't want to see somebody kick something off with an
> infinite loop and lock up the entire game.
I had a similiar situation, and took to a solution that looks like this:
void inmlua_hookhandler(lua_State *L, lua_Debug *ar)
{
char output[256];
if (ar->event == LUA_HOOKLINE)
{
g_inmgame->luacontrol.line_count += 1;
if ( g_inmgame->luacontrol.line_count >= INM_LUA_MAX_COMMANDS )
{
snprintf( output, 255,
"inmlua_hookhandler: Runaway script detected. [Line:%i]\n",
ar->currentline );
output[255] = 0;
lua_pushstring(L, output );
lua_error(L);
}
}
}
Where I load the script, I perform this initialization:
/* Prepare New Hook. */
lua_sethook( L , inmlua_hookhandler, LUA_MASKLINE, 0 );
g_inmgame->luacontrol.line_count = 0;
The magic number I use is 1000000 lines, which turns out to be about a
second or two from My Machine (tm), which during debugging is about
when I've noticed that there was a problem. This serves as an
all-else-fails way out of something that would likely require killing
by the OS.