[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PULL 57/58] json: Support %% in JSON strings when interpol
From: |
Markus Armbruster |
Subject: |
[Qemu-devel] [PULL 57/58] json: Support %% in JSON strings when interpolating |
Date: |
Fri, 24 Aug 2018 21:32:05 +0200 |
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 <address@hidden>
Reviewed-by: Eric Blake <address@hidden>
Message-Id: <address@hidden>
---
qobject/json-parser.c | 3 ++-
tests/check-qjson.c | 4 ++--
2 files changed, 4 insertions(+), 3 deletions(-)
diff --git a/qobject/json-parser.c b/qobject/json-parser.c
index 63e9229f1c..3318b8dad0 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 a1854573de..cc13f3d41e 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);
--
2.17.1
- [Qemu-devel] [PULL 31/58] json: remove useless return value from lexer/parser, (continued)
- [Qemu-devel] [PULL 31/58] json: remove useless return value from lexer/parser, Markus Armbruster, 2018/08/24
- [Qemu-devel] [PULL 14/58] check-qjson: Fix utf8_string() to test all invalid sequences, Markus Armbruster, 2018/08/24
- [Qemu-devel] [PULL 29/58] json: Fix \uXXXX for surrogate pairs, Markus Armbruster, 2018/08/24
- [Qemu-devel] [PULL 26/58] json: Leave rejecting invalid escape sequences to parser, Markus Armbruster, 2018/08/24
- [Qemu-devel] [PULL 18/58] json: Reject unescaped control characters, Markus Armbruster, 2018/08/24
- [Qemu-devel] [PULL 40/58] json: Leave rejecting invalid interpolation to parser, Markus Armbruster, 2018/08/24
- [Qemu-devel] [PULL 36/58] json: Don't create JSON_ERROR tokens that won't be used, Markus Armbruster, 2018/08/24
- [Qemu-devel] [PULL 32/58] json-parser: simplify and avoid JSONParserContext allocation, Markus Armbruster, 2018/08/24
- [Qemu-devel] [PULL 58/58] json: Update references to RFC 7159 to RFC 8259, Markus Armbruster, 2018/08/24
- [Qemu-devel] [PULL 42/58] json: Improve names of lexer states related to numbers, Markus Armbruster, 2018/08/24
- [Qemu-devel] [PULL 57/58] json: Support %% in JSON strings when interpolating,
Markus Armbruster <=
- [Qemu-devel] [PULL 45/58] json: Fix streamer not to ignore trailing unterminated structures, Markus Armbruster, 2018/08/24
- [Qemu-devel] [PULL 55/58] json: Keep interpolation state in JSONParserContext, Markus Armbruster, 2018/08/24
- [Qemu-devel] [PULL 44/58] json: Fix latent parser aborts at end of input, Markus Armbruster, 2018/08/24
- [Qemu-devel] [PULL 51/58] json: Make JSONToken opaque outside json-parser.c, Markus Armbruster, 2018/08/24
- [Qemu-devel] [PULL 41/58] json: Replace %I64d, %I64u by %PRId64, %PRIu64, Markus Armbruster, 2018/08/24
- [Qemu-devel] [PULL 38/58] json: Treat unwanted interpolation as lexical error, Markus Armbruster, 2018/08/24
- [Qemu-devel] [PULL 56/58] json: Improve safety of qobject_from_jsonf_nofail() & friends, Markus Armbruster, 2018/08/24
- [Qemu-devel] [PULL 53/58] json: Clean up headers, Markus Armbruster, 2018/08/24
- [Qemu-devel] [PULL 46/58] json: Assert json_parser_parse() consumes all tokens on success, Markus Armbruster, 2018/08/24
- [Qemu-devel] [PULL 47/58] qjson: Have qobject_from_json() & friends reject empty and blank, Markus Armbruster, 2018/08/24