[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PATCH v2 51/60] json: Eliminate lexer state IN_ERROR and p
From: |
Markus Armbruster |
Subject: |
[Qemu-devel] [PATCH v2 51/60] json: Eliminate lexer state IN_ERROR and pseudo-token JSON_MIN |
Date: |
Fri, 17 Aug 2018 17:05:50 +0200 |
Signed-off-by: Markus Armbruster <address@hidden>
Reviewed-by: Eric Blake <address@hidden>
---
include/qapi/qmp/json-lexer.h | 10 ++++------
qobject/json-lexer.c | 15 +++++++--------
2 files changed, 11 insertions(+), 14 deletions(-)
diff --git a/include/qapi/qmp/json-lexer.h b/include/qapi/qmp/json-lexer.h
index 8058695e40..f3524de07a 100644
--- a/include/qapi/qmp/json-lexer.h
+++ b/include/qapi/qmp/json-lexer.h
@@ -14,10 +14,9 @@
#ifndef QEMU_JSON_LEXER_H
#define QEMU_JSON_LEXER_H
-
-typedef enum json_token_type {
- JSON_MIN = 100,
- JSON_LCURLY = JSON_MIN,
+typedef enum {
+ JSON_ERROR = 0, /* must be zero */
+ JSON_LCURLY,
JSON_RCURLY,
JSON_LSQUARE,
JSON_RSQUARE,
@@ -29,8 +28,7 @@ typedef enum json_token_type {
JSON_STRING,
JSON_INTERPOL,
JSON_SKIP,
- JSON_ERROR,
- JSON_END_OF_INPUT
+ JSON_END_OF_INPUT /* must be last */
} JSONTokenType;
typedef struct JSONLexer {
diff --git a/qobject/json-lexer.c b/qobject/json-lexer.c
index ef29e2782d..49e075a51e 100644
--- a/qobject/json-lexer.c
+++ b/qobject/json-lexer.c
@@ -101,8 +101,9 @@
* - Decoding and validating is left to the parser.
*/
-enum json_lexer_state {
- IN_ERROR = 0, /* must really be 0, see json_lexer[] */
+enum {
+ IN_START = JSON_END_OF_INPUT + 1,
+ IN_START_INTERPOL, /* must be IN_START + 1 */
IN_DQ_STRING_ESCAPE,
IN_DQ_STRING,
IN_SQ_STRING_ESCAPE,
@@ -119,11 +120,9 @@ enum json_lexer_state {
IN_KEYWORD,
IN_INTERPOL,
IN_WHITESPACE,
- IN_START,
- IN_START_INTERPOL, /* must be IN_START + 1 */
};
-QEMU_BUILD_BUG_ON((int)JSON_MIN <= (int)IN_START_INTERPOL);
+QEMU_BUILD_BUG_ON(JSON_ERROR != 0); /* json_lexer[] relies on this */
QEMU_BUILD_BUG_ON(IN_START_INTERPOL != IN_START + 1);
#define TERMINAL(state) [0 ... 0x7F] = (state)
@@ -132,10 +131,10 @@ QEMU_BUILD_BUG_ON(IN_START_INTERPOL != IN_START + 1);
from OLD_STATE required lookahead. This happens whenever the table
below uses the TERMINAL macro. */
#define TERMINAL_NEEDED_LOOKAHEAD(old_state, terminal) \
- (terminal != IN_ERROR && json_lexer[(old_state)][0] == (terminal))
+ (terminal != JSON_ERROR && json_lexer[(old_state)][0] == (terminal))
static const uint8_t json_lexer[][256] = {
- /* Relies on default initialization to IN_ERROR! */
+ /* Relies on default initialization to JSON_ERROR */
/* double quote string */
[IN_DQ_STRING_ESCAPE] = {
@@ -303,7 +302,7 @@ static void json_lexer_feed_char(JSONLexer *lexer, char ch,
bool flush)
g_string_truncate(lexer->token, 0);
new_state = lexer->start_state;
break;
- case IN_ERROR:
+ case JSON_ERROR:
/* XXX: To avoid having previous bad input leaving the parser in an
* unresponsive state where we consume unpredictable amounts of
* subsequent "good" input, percolate this error state up to the
--
2.17.1
- [Qemu-devel] [PATCH v2 53/60] json: Make JSONToken opaque outside json-parser.c, (continued)
- [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, 2018/08/17
- [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 <=
- [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
- [Qemu-devel] [PATCH v2 48/60] json: Enforce token count and size limits more tightly, Markus Armbruster, 2018/08/17
- [Qemu-devel] [PATCH v2 56/60] docs/interop/qmp-spec: How to force known good parser state, Markus Armbruster, 2018/08/17
- [Qemu-devel] [PATCH v2 54/60] qobject: Drop superfluous includes of qemu-common.h, Markus Armbruster, 2018/08/17
- [Qemu-devel] [PATCH v2 47/60] qjson: Have qobject_from_json() & friends reject empty and blank, Markus Armbruster, 2018/08/17
- [Qemu-devel] [PATCH v2 55/60] json: Clean up headers, Markus Armbruster, 2018/08/17
- Re: [Qemu-devel] [PATCH v2 00/60] json: Fixes, error reporting improvements, cleanups, no-reply, 2018/08/18