Fix stack corruption when a script tries to select an invalid line

This commit is contained in:
Thomas Goyne 2014-12-24 16:24:51 -08:00
parent 84bd682e2e
commit 0a18fe6cd3
1 changed files with 13 additions and 9 deletions

View File

@ -140,16 +140,20 @@ struct LuaForEachBreak {};
template<typename Func> template<typename Func>
void lua_for_each(lua_State *L, Func&& func) { void lua_for_each(lua_State *L, Func&& func) {
lua_pushnil(L); // initial key {
while (lua_next(L, -2)) { LuaStackcheck stackcheck(L);
try { lua_pushnil(L); // initial key
func(); while (lua_next(L, -2)) {
try {
func();
}
catch (LuaForEachBreak) {
lua_pop(L, 2); // pop value and key
break;
}
lua_pop(L, 1); // pop value, leave key
} }
catch (LuaForEachBreak) { stackcheck.check_stack(0);
lua_pop(L, 1);
break;
}
lua_pop(L, 1); // pop value, leave key
} }
lua_pop(L, 1); // pop table lua_pop(L, 1); // pop table
} }