From 79debed9dacc5d48386124a1ee9a3f7be655fdf6 Mon Sep 17 00:00:00 2001 From: Sebastian Harl Date: Mon, 28 Sep 2015 22:07:08 +0200 Subject: [PATCH] store_json: Fix parent/child detection. Rewinding the formatter state has to happen any time we see a parent object of the current object. This happens every time the current context isn't HOST (hosts don't have any parents) or the new object is an ATTRIBUTE (which are always children of whatever other object type). This broke in 3603db13105aefac4d6ceb356bcfd118a92fa654. --- src/core/store_json.c | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/src/core/store_json.c b/src/core/store_json.c index c8e35fe..a2c117b 100644 --- a/src/core/store_json.c +++ b/src/core/store_json.c @@ -142,11 +142,12 @@ handle_new_object(sdb_store_json_formatter_t *f, sdb_store_obj_t *obj) return 0; } - if ((f->current >= 1) && (obj->type != SDB_ATTRIBUTE)) { - /* new entry of a previous type or a new type on the same level; + if ((f->context[f->current] != SDB_HOST) + && (obj->type != SDB_ATTRIBUTE)) { + /* new entry of the same type or a parent object; * rewind to the right state */ while ((f->current > 0) - && (f->context[f->current] == obj->type)) { + && (f->context[f->current] != obj->type)) { sdb_strbuf_append(f->buf, "}]"); --f->current; } -- 2.30.2