Message ID | 20180817150559.16243-61-armbru@redhat.com |
---|---|
State | New |
Headers | show |
Series | json: Fixes, error reporting improvements, cleanups | expand |
On 08/17/2018 10:05 AM, Markus Armbruster wrote: > The previous commit makes JSON strings containing '%' awkward to > express in templates: you'd have to mask the '%' with an Unicode s/an Unicode/a Unicode/ > escape \u0025. No template currently contains such JSON strings. > Support the printf conversion specification %% in JSON strings as a > convenience anyway, because it's trivially easy to do. > > Signed-off-by: Markus Armbruster <armbru@redhat.com> > --- > qobject/json-parser.c | 3 ++- > tests/check-qjson.c | 4 ++-- > 2 files changed, 4 insertions(+), 3 deletions(-) > Reviewed-by: Eric Blake <eblake@redhat.com>
diff --git a/qobject/json-parser.c b/qobject/json-parser.c index 273e354ccd..a63e2c33c8 100644 --- a/qobject/json-parser.c +++ b/qobject/json-parser.c @@ -208,10 +208,11 @@ static QString *parse_string(JSONParserContext *ctxt, JSONToken *token) } break; case '%': - if (ctxt->ap) { + if (ctxt->ap && ptr[1] != '%') { parse_error(ctxt, token, "can't interpolate into string"); goto out; } + ptr++; /* fall through */ default: cp = mod_utf8_codepoint(ptr, 6, &end); diff --git a/tests/check-qjson.c b/tests/check-qjson.c index 89fd6ad6f6..d086b146f7 100644 --- a/tests/check-qjson.c +++ b/tests/check-qjson.c @@ -1270,7 +1270,7 @@ static void simple_interpolation(void) QObject *obj; QLitObject decoded = QLIT_QLIST(((QLitObject[]){ QLIT_QNUM(1), - QLIT_QNUM(2), + QLIT_QSTR("100%"), QLIT_QLIST(((QLitObject[]){ QLIT_QNUM(32), QLIT_QNUM(42), @@ -1280,7 +1280,7 @@ static void simple_interpolation(void) embedded_obj = qobject_from_json("[32, 42]", &error_abort); g_assert(embedded_obj != NULL); - obj = qobject_from_jsonf_nofail("[%d, 2, %p]", 1, embedded_obj); + obj = qobject_from_jsonf_nofail("[%d, '100%%', %p]", 1, embedded_obj); g_assert(qlit_equal_qobject(&decoded, obj)); qobject_unref(obj);
The previous commit makes JSON strings containing '%' awkward to express in templates: you'd have to mask the '%' with an Unicode escape \u0025. No template currently contains such JSON strings. Support the printf conversion specification %% in JSON strings as a convenience anyway, because it's trivially easy to do. Signed-off-by: Markus Armbruster <armbru@redhat.com> --- qobject/json-parser.c | 3 ++- tests/check-qjson.c | 4 ++-- 2 files changed, 4 insertions(+), 3 deletions(-)