[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PULL 23/58] json: Report first rather than last parse erro
From: |
Markus Armbruster |
Subject: |
[Qemu-devel] [PULL 23/58] json: Report first rather than last parse error |
Date: |
Fri, 24 Aug 2018 21:31:31 +0200 |
Quiz time! When a parser reports multiple errors, but the user gets
to see just one, which one is (on average) the least useful one?
Yes, you're right, it's the last one! You're clearly familiar with
compilers.
Which one does QEMU report?
Right again, the last one! You're clearly familiar with QEMU.
Reproducer: feeding
{"abc\xC2ijk": 1}\n
to QMP produces
{"error": {"class": "GenericError", "desc": "JSON parse error, key is not a
string in object"}}
Report the first error instead. The reproducer now produces
{"error": {"class": "GenericError", "desc": "JSON parse error, invalid
UTF-8 sequence in string"}}
Signed-off-by: Markus Armbruster <address@hidden>
Reviewed-by: Eric Blake <address@hidden>
Message-Id: <address@hidden>
---
qobject/json-parser.c | 8 ++++----
1 file changed, 4 insertions(+), 4 deletions(-)
diff --git a/qobject/json-parser.c b/qobject/json-parser.c
index 0e232ff101..b77931614b 100644
--- a/qobject/json-parser.c
+++ b/qobject/json-parser.c
@@ -54,13 +54,13 @@ static void GCC_FMT_ATTR(3, 4)
parse_error(JSONParserContext *ctxt,
{
va_list ap;
char message[1024];
+
+ if (ctxt->err) {
+ return;
+ }
va_start(ap, msg);
vsnprintf(message, sizeof(message), msg, ap);
va_end(ap);
- if (ctxt->err) {
- error_free(ctxt->err);
- ctxt->err = NULL;
- }
error_setg(&ctxt->err, "JSON parse error, %s", message);
}
--
2.17.1
- [Qemu-devel] [PULL 12/58] check-qjson: Cover UTF-8 in single quoted strings, (continued)
- [Qemu-devel] [PULL 12/58] check-qjson: Cover UTF-8 in single quoted strings, Markus Armbruster, 2018/08/24
- [Qemu-devel] [PULL 25/58] json: Accept overlong \xC0\x80 as U+0000 ("modified UTF-8"), Markus Armbruster, 2018/08/24
- [Qemu-devel] [PULL 01/58] docs/interop/qmp-spec: How to force known good parser state, Markus Armbruster, 2018/08/24
- [Qemu-devel] [PULL 15/58] check-qjson qmp-test: Cover control characters more thoroughly, Markus Armbruster, 2018/08/24
- [Qemu-devel] [PULL 16/58] check-qjson: Cover interpolation more thoroughly, Markus Armbruster, 2018/08/24
- [Qemu-devel] [PULL 10/58] check-qjson: Cover escaped characters more thoroughly, part 2, Markus Armbruster, 2018/08/24
- [Qemu-devel] [PULL 30/58] check-qjson: Fix and enable utf8_string()'s disabled part, Markus Armbruster, 2018/08/24
- [Qemu-devel] [PULL 28/58] json: Reject invalid \uXXXX, fix \u0000, Markus Armbruster, 2018/08/24
- [Qemu-devel] [PULL 39/58] json: Pass lexical errors and limit violations to callback, Markus Armbruster, 2018/08/24
- [Qemu-devel] [PULL 19/58] json: Revamp lexer documentation, Markus Armbruster, 2018/08/24
- [Qemu-devel] [PULL 23/58] json: Report first rather than last parse error,
Markus Armbruster <=
- [Qemu-devel] [PULL 24/58] json: Leave rejecting invalid UTF-8 to parser, Markus Armbruster, 2018/08/24
- [Qemu-devel] [PULL 05/58] qmp-cmd-test: Split off qmp-test, Markus Armbruster, 2018/08/24
- [Qemu-devel] [PULL 22/58] json: Reject invalid UTF-8 sequences, Markus Armbruster, 2018/08/24
- [Qemu-devel] [PULL 27/58] json: Simplify parse_string(), Markus Armbruster, 2018/08/24
- [Qemu-devel] [PULL 09/58] check-qjson: Streamline escaped_string()'s test strings, Markus Armbruster, 2018/08/24
- [Qemu-devel] [PULL 35/58] json: Don't pass null @tokens to json_parser_parse(), Markus Armbruster, 2018/08/24
- [Qemu-devel] [PULL 37/58] json: Rename token JSON_ESCAPE & friends to JSON_INTERP, Markus Armbruster, 2018/08/24
- [Qemu-devel] [PULL 34/58] json: Redesign the callback to consume JSON values, Markus Armbruster, 2018/08/24
- [Qemu-devel] [PULL 08/58] check-qjson: Cover escaped characters more thoroughly, part 1, Markus Armbruster, 2018/08/24
- [Qemu-devel] [PULL 21/58] check-qjson: Document we expect invalid UTF-8 to be rejected, Markus Armbruster, 2018/08/24