[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PATCH v3 20/58] json: Tighten and simplify qstring_from_es
From: |
Markus Armbruster |
Subject: |
[Qemu-devel] [PATCH v3 20/58] json: Tighten and simplify qstring_from_escaped_str()'s loop |
Date: |
Thu, 23 Aug 2018 18:39:47 +0200 |
Simplify loop control, and assert that the string ends with the
appropriate quote (the lexer ensures it does).
Signed-off-by: Markus Armbruster <address@hidden>
Reviewed-by: Eric Blake <address@hidden>
---
qobject/json-parser.c | 30 +++++++-----------------------
1 file changed, 7 insertions(+), 23 deletions(-)
diff --git a/qobject/json-parser.c b/qobject/json-parser.c
index a5aa790d62..164b86769b 100644
--- a/qobject/json-parser.c
+++ b/qobject/json-parser.c
@@ -132,65 +132,49 @@ static QString
*qstring_from_escaped_str(JSONParserContext *ctxt,
{
const char *ptr = token->str;
QString *str;
- int double_quote = 1;
-
- if (*ptr == '"') {
- double_quote = 1;
- } else {
- double_quote = 0;
- }
- ptr++;
+ char quote;
+ assert(*ptr == '"' || *ptr == '\'');
+ quote = *ptr++;
str = qstring_new();
- while (*ptr &&
- ((double_quote && *ptr != '"') || (!double_quote && *ptr != '\'')))
{
+
+ while (*ptr != quote) {
+ assert(*ptr);
if (*ptr == '\\') {
ptr++;
-
- switch (*ptr) {
+ switch (*ptr++) {
case '"':
qstring_append(str, "\"");
- ptr++;
break;
case '\'':
qstring_append(str, "'");
- ptr++;
break;
case '\\':
qstring_append(str, "\\");
- ptr++;
break;
case '/':
qstring_append(str, "/");
- ptr++;
break;
case 'b':
qstring_append(str, "\b");
- ptr++;
break;
case 'f':
qstring_append(str, "\f");
- ptr++;
break;
case 'n':
qstring_append(str, "\n");
- ptr++;
break;
case 'r':
qstring_append(str, "\r");
- ptr++;
break;
case 't':
qstring_append(str, "\t");
- ptr++;
break;
case 'u': {
uint16_t unicode_char = 0;
char utf8_char[4];
int i = 0;
- ptr++;
-
for (i = 0; i < 4; i++) {
if (qemu_isxdigit(*ptr)) {
unicode_char |= hex2decimal(*ptr) << ((3 - i) * 4);
--
2.17.1
- [Qemu-devel] [PATCH v3 30/58] check-qjson: Fix and enable utf8_string()'s disabled part, (continued)
- [Qemu-devel] [PATCH v3 30/58] check-qjson: Fix and enable utf8_string()'s disabled part, Markus Armbruster, 2018/08/23
- [Qemu-devel] [PATCH v3 08/58] check-qjson: Cover escaped characters more thoroughly, part 1, Markus Armbruster, 2018/08/23
- [Qemu-devel] [PATCH v3 07/58] test-qga: Clean up how we test QGA synchronization, Markus Armbruster, 2018/08/23
- [Qemu-devel] [PATCH v3 15/58] check-qjson qmp-test: Cover control characters more thoroughly, Markus Armbruster, 2018/08/23
- [Qemu-devel] [PATCH v3 24/58] json: Leave rejecting invalid UTF-8 to parser, Markus Armbruster, 2018/08/23
- [Qemu-devel] [PATCH v3 05/58] qmp-cmd-test: Split off qmp-test, Markus Armbruster, 2018/08/23
- [Qemu-devel] [PATCH v3 23/58] json: Report first rather than last parse error, Markus Armbruster, 2018/08/23
- [Qemu-devel] [PATCH v3 14/58] check-qjson: Fix utf8_string() to test all invalid sequences, Markus Armbruster, 2018/08/23
- [Qemu-devel] [PATCH v3 11/58] check-qjson: Consolidate partly redundant string tests, Markus Armbruster, 2018/08/23
- [Qemu-devel] [PATCH v3 01/58] docs/interop/qmp-spec: How to force known good parser state, Markus Armbruster, 2018/08/23
- [Qemu-devel] [PATCH v3 20/58] json: Tighten and simplify qstring_from_escaped_str()'s loop,
Markus Armbruster <=
- [Qemu-devel] [PATCH v3 09/58] check-qjson: Streamline escaped_string()'s test strings, Markus Armbruster, 2018/08/23
- [Qemu-devel] [PATCH v3 02/58] check-qjson: Cover multiple JSON objects in same string, Markus Armbruster, 2018/08/23
- [Qemu-devel] [PATCH v3 03/58] check-qjson: Cover blank and lexically erroneous input, Markus Armbruster, 2018/08/23
- [Qemu-devel] [PATCH v3 06/58] qmp-test: Cover syntax and lexical errors, Markus Armbruster, 2018/08/23
- [Qemu-devel] [PATCH v3 49/58] json: Streamline json_message_process_token(), Markus Armbruster, 2018/08/23
- [Qemu-devel] [PATCH v3 47/58] qjson: Have qobject_from_json() & friends reject empty and blank, Markus Armbruster, 2018/08/23
- [Qemu-devel] [PATCH v3 46/58] json: Assert json_parser_parse() consumes all tokens on success, Markus Armbruster, 2018/08/23
- [Qemu-devel] [PATCH v3 42/58] json: Improve names of lexer states related to numbers, Markus Armbruster, 2018/08/23