[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PATCH v2 41/60] json: Nicer recovery from invalid leading
From: |
Markus Armbruster |
Subject: |
[Qemu-devel] [PATCH v2 41/60] json: Nicer recovery from invalid leading zero |
Date: |
Fri, 17 Aug 2018 17:05:40 +0200 |
For input 0123, the lexer produces the tokens
JSON_ERROR 01
JSON_INTEGER 23
Reporting an error is correct; 0123 is invalid according to RFC 7159.
But the error recovery isn't nice.
Make the finite state machine eat digits before going into the error
state. The lexer now produces
JSON_ERROR 0123
Signed-off-by: Markus Armbruster <address@hidden>
Reviewed-by: Eric Blake <address@hidden>
---
qobject/json-lexer.c | 7 ++++++-
1 file changed, 6 insertions(+), 1 deletion(-)
diff --git a/qobject/json-lexer.c b/qobject/json-lexer.c
index ab2453a1e1..4028f39f28 100644
--- a/qobject/json-lexer.c
+++ b/qobject/json-lexer.c
@@ -108,6 +108,7 @@ enum json_lexer_state {
IN_SQ_STRING_ESCAPE,
IN_SQ_STRING,
IN_ZERO,
+ IN_BAD_ZERO,
IN_DIGITS,
IN_DIGIT,
IN_EXP_E,
@@ -159,10 +160,14 @@ static const uint8_t json_lexer[][256] = {
/* Zero */
[IN_ZERO] = {
TERMINAL(JSON_INTEGER),
- ['0' ... '9'] = IN_ERROR,
+ ['0' ... '9'] = IN_BAD_ZERO,
['.'] = IN_MANTISSA,
},
+ [IN_BAD_ZERO] = {
+ ['0' ... '9'] = IN_BAD_ZERO,
+ },
+
/* Float */
[IN_DIGITS] = {
TERMINAL(JSON_FLOAT),
--
2.17.1
- [Qemu-devel] [PATCH v2 26/60] json: Simplify parse_string(), (continued)
- [Qemu-devel] [PATCH v2 26/60] json: Simplify parse_string(), Markus Armbruster, 2018/08/17
- [Qemu-devel] [PATCH v2 33/60] json: Redesign the callback to consume JSON values, Markus Armbruster, 2018/08/17
- [Qemu-devel] [PATCH v2 11/60] check-qjson: Cover UTF-8 in single quoted strings, Markus Armbruster, 2018/08/17
- [Qemu-devel] [PATCH v2 50/60] json: Unbox tokens queue in JSONMessageParser, Markus Armbruster, 2018/08/17
- [Qemu-devel] [PATCH v2 32/60] json: Have lexer call streamer directly, Markus Armbruster, 2018/08/17
- [Qemu-devel] [PATCH v2 53/60] json: Make JSONToken opaque outside json-parser.c, Markus Armbruster, 2018/08/17
- [Qemu-devel] [PATCH v2 59/60] json: Improve safety of qobject_from_jsonf_nofail() & friends, Markus Armbruster, 2018/08/17
- [Qemu-devel] [PATCH v2 46/60] json: Assert json_parser_parse() consumes all tokens on success, Markus Armbruster, 2018/08/17
- [Qemu-devel] [PATCH v2 45/60] json: Fix streamer not to ignore trailing unterminated structures, Markus Armbruster, 2018/08/17
- [Qemu-devel] [PATCH v2 41/60] json: Nicer recovery from invalid leading zero,
Markus Armbruster <=
[Qemu-devel] [PATCH v2 40/60] json: Replace %I64d, %I64u by %PRId64, %PRIu64, Markus Armbruster, 2018/08/17
[Qemu-devel] [PATCH v2 49/60] json: Streamline json_message_process_token(), Markus Armbruster, 2018/08/17
[Qemu-devel] [PATCH v2 39/60] json: Leave rejecting invalid interpolation to parser, Markus Armbruster, 2018/08/17
[Qemu-devel] [PATCH v2 51/60] json: Eliminate lexer state IN_ERROR and pseudo-token JSON_MIN, Markus Armbruster, 2018/08/17
[Qemu-devel] [PATCH v2 43/60] qjson: Fix qobject_from_json() & friends for multiple values, Markus Armbruster, 2018/08/17
[Qemu-devel] [PATCH v2 57/60] tests/drive_del-test: Fix harmless JSON interpolation bug, Markus Armbruster, 2018/08/17