A function that returns -1 for multiple possible failures, but only raises a libvirt error for some of those failures, is hard to use correctly. Yet both of our JSON object/array appenders fall in that pattern. We should either use the _QUIET memory allocation variants, and make callers decide to report failure; or we can make all failure paths noisy. This patch takes the latter approach. Signed-off-by: Eric Blake <eblake@xxxxxxxxxx> --- src/util/virjson.c | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/src/util/virjson.c b/src/util/virjson.c index 78f868a162..a028a0813a 100644 --- a/src/util/virjson.c +++ b/src/util/virjson.c @@ -620,11 +620,16 @@ virJSONValueObjectAppend(virJSONValuePtr object, { char *newkey; - if (object->type != VIR_JSON_TYPE_OBJECT) + if (object->type != VIR_JSON_TYPE_OBJECT) { + virReportError(VIR_ERR_INTERNAL_ERROR, "%s", + _("expecting JSON object")); return -1; + } - if (virJSONValueObjectHasKey(object, key)) + if (virJSONValueObjectHasKey(object, key)) { + virReportError(VIR_ERR_INTERNAL_ERROR, _("duplicate key '%s'"), key); return -1; + } if (VIR_STRDUP(newkey, key) < 0) return -1; @@ -774,8 +779,10 @@ int virJSONValueArrayAppend(virJSONValuePtr array, virJSONValuePtr value) { - if (array->type != VIR_JSON_TYPE_ARRAY) + if (array->type != VIR_JSON_TYPE_ARRAY) { + virReportError(VIR_ERR_INTERNAL_ERROR, "%s", _("expecting JSON array")); return -1; + } if (VIR_REALLOC_N(array->data.array.values, array->data.array.nvalues + 1) < 0) -- 2.20.1 -- libvir-list mailing list libvir-list@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/libvir-list