From: Marek Vavrusa Date: Fri, 27 May 2016 07:33:54 +0000 (-0700) Subject: daemon: fix serialization of empty nested tables X-Git-Tag: v1.1.0~76 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=f0a1db1c6f1dff131b82a790911cf054484ae083;p=thirdparty%2Fknot-resolver.git daemon: fix serialization of empty nested tables --- diff --git a/daemon/engine.c b/daemon/engine.c index 774fb8cbd..7f1529f56 100644 --- a/daemon/engine.c +++ b/daemon/engine.c @@ -289,23 +289,24 @@ static JsonNode *l_pack_elem(lua_State *L, int top) JsonNode *node = NULL; lua_pushnil(L); while(lua_next(L, top) != 0) { - JsonNode *val = l_pack_elem(L, top + 2); - const bool no_key = lua_isnumber(L, top + 1); + const bool is_array = lua_isnumber(L, top + 1); if (!node) { - node = no_key ? json_mkarray() : json_mkobject(); + node = is_array ? json_mkarray() : json_mkobject(); if (!node) { return NULL; } } - /* Insert to array/table */ - if (no_key) { + /* Insert to array/table. */ + JsonNode *val = l_pack_elem(L, top + 2); + if (is_array) { json_append_element(node, val); } else { json_append_member(node, lua_tostring(L, top + 1), val); } lua_pop(L, 1); } - return node; + /* Return empty object for empty tables. */ + return node ? node : json_mkobject(); } /** @internal Serialize to string */