From a193352ff9c7cd2cd07846118bc49921d0f53af8 Mon Sep 17 00:00:00 2001 From: Markus Armbruster Date: Tue, 3 Jul 2018 10:53:47 +0200 Subject: qobject: New qdict_from_jsonf_nofail() Many uses of qobject_from_jsonf() convert JSON objects. Create new convenience function qdict_from_jsonf_nofail() that includes the conversion to QDict. The next few commits will put it to use. Signed-off-by: Markus Armbruster Reviewed-by: Eric Blake Message-Id: <20180703085358.13941-22-armbru@redhat.com> --- qobject/qjson.c | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) (limited to 'qobject/qjson.c') diff --git a/qobject/qjson.c b/qobject/qjson.c index 9816a65c7d..0df3120202 100644 --- a/qobject/qjson.c +++ b/qobject/qjson.c @@ -76,6 +76,24 @@ QObject *qobject_from_jsonf(const char *string, ...) return obj; } +/* + * Parse @string as JSON object with %-escapes interpolated. + * Abort on error. Do not use with untrusted @string. + * Return the resulting QDict. It is never null. + */ +QDict *qdict_from_jsonf_nofail(const char *string, ...) +{ + QDict *obj; + va_list ap; + + va_start(ap, string); + obj = qobject_to(QDict, qobject_from_jsonv(string, &ap, &error_abort)); + va_end(ap); + + assert(obj); + return obj; +} + typedef struct ToJsonIterState { int indent; -- cgit 1.4.1 From ab45015a968cc2c784a00775d52c6ea17e72c9fb Mon Sep 17 00:00:00 2001 From: Markus Armbruster Date: Tue, 3 Jul 2018 10:53:55 +0200 Subject: qobject: Let qobject_from_jsonf() fail instead of abort qobject_from_jsonf() aborts on error, unlike qobject_from_jsonv(), which returns null. Since all remaining users of qobject_from_jsonf() cope fine with null, change it to return null. Signed-off-by: Markus Armbruster Reviewed-by: Eric Blake Message-Id: <20180703085358.13941-30-armbru@redhat.com> --- qobject/qjson.c | 5 ----- 1 file changed, 5 deletions(-) (limited to 'qobject/qjson.c') diff --git a/qobject/qjson.c b/qobject/qjson.c index 0df3120202..2f6a590e44 100644 --- a/qobject/qjson.c +++ b/qobject/qjson.c @@ -59,10 +59,6 @@ QObject *qobject_from_json(const char *string, Error **errp) return qobject_from_jsonv(string, NULL, errp); } -/* - * IMPORTANT: This function aborts on error, thus it must not - * be used with untrusted arguments. - */ QObject *qobject_from_jsonf(const char *string, ...) { QObject *obj; @@ -72,7 +68,6 @@ QObject *qobject_from_jsonf(const char *string, ...) obj = qobject_from_jsonv(string, &ap, &error_abort); va_end(ap); - assert(obj != NULL); return obj; } -- cgit 1.4.1