From b116e715a8e43469cd1a8979d8c5785f9c298d40 Mon Sep 17 00:00:00 2001 From: Peter Krempa Date: Thu, 11 Feb 2021 17:29:29 +0100 Subject: [PATCH] virJSONValueObjectInsert: Clear @value on successful insertion The function takes ownership of @value on success so the proper semantics will be to clear out the @value pointer. Convert @value to a double pointer to do this. Signed-off-by: Peter Krempa Reviewed-by: Michal Privoznik --- src/util/virjson.c | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/src/util/virjson.c b/src/util/virjson.c index a509943fde..80ebcb587c 100644 --- a/src/util/virjson.c +++ b/src/util/virjson.c @@ -577,10 +577,10 @@ virJSONValueNewObject(void) static int virJSONValueObjectInsert(virJSONValuePtr object, const char *key, - virJSONValuePtr value, + virJSONValuePtr *value, bool prepend) { - virJSONObjectPair pair = { NULL, value }; + virJSONObjectPair pair = { NULL, *value }; int ret = -1; if (object->type != VIR_JSON_TYPE_OBJECT) { @@ -604,6 +604,9 @@ virJSONValueObjectInsert(virJSONValuePtr object, object->data.object.npairs, pair); } + if (ret == 0) + *value = NULL; + VIR_FREE(pair.key); return ret; } @@ -614,7 +617,7 @@ virJSONValueObjectAppend(virJSONValuePtr object, const char *key, virJSONValuePtr value) { - return virJSONValueObjectInsert(object, key, value, false); + return virJSONValueObjectInsert(object, key, &value, false); } @@ -627,10 +630,8 @@ virJSONValueObjectInsertString(virJSONValuePtr object, virJSONValuePtr jvalue = virJSONValueNewString(value); if (!jvalue) return -1; - if (virJSONValueObjectInsert(object, key, jvalue, prepend) < 0) { - virJSONValueFree(jvalue); + if (virJSONValueObjectInsert(object, key, &jvalue, prepend) < 0) return -1; - } return 0; } -- 2.47.2