luci-lib-jsonc: Ignore non-string-or-number keys in tables
authorJan-Philipp Litza <janphilipp@litza.de>
Sun, 30 Aug 2015 13:42:52 +0000 (15:42 +0200)
committerJan-Philipp Litza <janphilipp@litza.de>
Sun, 30 Aug 2015 13:51:17 +0000 (15:51 +0200)
Previously, the following caused a segmentation fault:

    json.stringify({[{}] = true})

This was caused by lua_tostring() returning NULL for anything but
strings and numbers, letting json_object_object_add crash.

This patch makes jsonc ignore all keys which have no string
representation altogether.

Signed-off-by: Jan-Philipp Litza <janphilipp@litza.de>
libs/luci-lib-jsonc/src/jsonc.c

index 49cb21f..827fde8 100644 (file)
@@ -286,8 +286,9 @@ static struct json_object * _lua_to_json(lua_State *L, int index)
                        lua_pushvalue(L, -2);
                        key = lua_tostring(L, -1);
 
                        lua_pushvalue(L, -2);
                        key = lua_tostring(L, -1);
 
-                       json_object_object_add(obj, key,
-                                                                  _lua_to_json(L, lua_gettop(L) - 1));
+                       if (key)
+                               json_object_object_add(obj, key,
+                                                      _lua_to_json(L, lua_gettop(L) - 1));
 
                        lua_pop(L, 2);
                }
 
                        lua_pop(L, 2);
                }