json: Report first rather than last parse error
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 <armbru@redhat.com> Reviewed-by: Eric Blake <eblake@redhat.com> Message-Id: <20180823164025.12553-24-armbru@redhat.com>
This commit is contained in:
parent
e59f39d403
commit
574bf16ff1
@ -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);
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user