}
// Converts Lua table --> JSON
-void read_json_value(lua_State *L, Json::Value &root, int index)
+void read_json_value(lua_State *L, Json::Value &root, int index, u8 recursion)
{
+ if (recursion > 16) {
+ throw SerializationError("Maximum recursion depth exceeded");
+ }
int type = lua_type(L, index);
if (type == LUA_TBOOLEAN) {
root = (bool) lua_toboolean(L, index);
while (lua_next(L, index)) {
// Key is at -2 and value is at -1
Json::Value value;
- read_json_value(L, value, lua_gettop(L));
+ read_json_value(L, value, lua_gettop(L), recursion + 1);
Json::ValueType roottype = root.type();
int keytype = lua_type(L, -1);