То, что делает ваш текущий код, заменяет все вхождения /
на /
- это вообще ничего не делает. Вам нужно заменить вхождения на _
:
var str = "One/Two/Three";
str = str.replace(/\//g, '_');
console.log(str);
Вы можете использовать ловушку для обратного вызова C каждый раз, когда lua выполняет строку скрипта. В этой функции перехвата вы можете проверить, хочет ли пользователь выйти, и вызвать lua_error, если он это сделал.
static bool ms_quit = false;
void IWantToQuit()
{
ms_quit = true;
}
void LineHookFunc(lua_State *L, lua_Debug *ar)
{
if(ar.event == LUA_HOOKLINE)
if(ms_quit == true)
luaL_error(L, "Too Many Lines Error");
}
//...
lua_State *Lua = lua_open();
char * code;
// Initialisation code
lua_sethook(Lua, &LineHookFunc, LUA_MASKLINE, 0);
luaL_dostring(L, code);
Недостаточно привязки к стропам. Этот код представляет собой одну строку, но повторяется бесконечно:
while true do end
Вам необходимо установить ловушку подсчета инструкций. Если я не ошибаюсь, это будет
lua_sethook(Lua, &LineHookFunc, LUA_MASKCOUNT, NUM_INSTRUCTIONS);
. Вы хотите выбрать NUM_INSTRUCTIONS, чтобы оно не было слишком маленьким (иначе вы получите накладные расходы на производительность) и не слишком большим (иначе вы будете ждать слишком долго до остановки).
Для соответствующей реализации только Lua см. эту библиотеку .
Если вы хотите добавить дополнительную защиту от ненадежного кода Lua, поищите в Google "песочницу Lua" - это больше, чем просто бесконечный цикл предотвращение.