[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PATCH v2 34/60] json: Don't pass null @tokens to json_pars
From: |
Markus Armbruster |
Subject: |
[Qemu-devel] [PATCH v2 34/60] json: Don't pass null @tokens to json_parser_parse() |
Date: |
Fri, 17 Aug 2018 17:05:33 +0200 |
json_parser_parse() normally returns the QObject on success. Except
it returns null when its @tokens argument is null.
Its only caller json_message_process_token() passes null @tokens when
emitting a lexical error. The call is a rather opaque way to say json
= NULL then.
Simplify matters by lifting the assignment to json out of the emit
path: initialize json to null, set it to the value of
json_parser_parse() when there's no lexical error. Drop the special
case from json_parser_parse().
Signed-off-by: Markus Armbruster <address@hidden>
Reviewed-by: Eric Blake <address@hidden>
---
qobject/json-parser.c | 4 ----
qobject/json-streamer.c | 25 ++++++++++++-------------
2 files changed, 12 insertions(+), 17 deletions(-)
diff --git a/qobject/json-parser.c b/qobject/json-parser.c
index f2646dce84..866f7e3f14 100644
--- a/qobject/json-parser.c
+++ b/qobject/json-parser.c
@@ -546,10 +546,6 @@ QObject *json_parser_parse(GQueue *tokens, va_list *ap,
Error **errp)
JSONParserContext ctxt = { .buf = tokens };
QObject *result;
- if (!tokens) {
- return NULL;
- }
-
result = parse_value(&ctxt, ap);
error_propagate(errp, ctxt.err);
diff --git a/qobject/json-streamer.c b/qobject/json-streamer.c
index 7fd0ff8756..0c33186e8e 100644
--- a/qobject/json-streamer.c
+++ b/qobject/json-streamer.c
@@ -39,9 +39,9 @@ void json_message_process_token(JSONLexer *lexer, GString
*input,
JSONTokenType type, int x, int y)
{
JSONMessageParser *parser = container_of(lexer, JSONMessageParser, lexer);
+ QObject *json = NULL;
Error *err = NULL;
JSONToken *token;
- QObject *json;
switch (type) {
case JSON_LCURLY:
@@ -72,34 +72,33 @@ void json_message_process_token(JSONLexer *lexer, GString
*input,
g_queue_push_tail(parser->tokens, token);
if (type == JSON_ERROR) {
- goto out_emit_bad;
- } else if (parser->brace_count < 0 ||
+ goto out_emit;
+ }
+
+ if (parser->brace_count < 0 ||
parser->bracket_count < 0 ||
(parser->brace_count == 0 &&
parser->bracket_count == 0)) {
+ json = json_parser_parse(parser->tokens, parser->ap, &err);
+ parser->tokens = NULL;
goto out_emit;
- } else if (parser->token_size > MAX_TOKEN_SIZE ||
+ }
+
+ if (parser->token_size > MAX_TOKEN_SIZE ||
g_queue_get_length(parser->tokens) > MAX_TOKEN_COUNT ||
parser->bracket_count + parser->brace_count > MAX_NESTING) {
/* Security consideration, we limit total memory allocated per object
* and the maximum recursion depth that a message can force.
*/
- goto out_emit_bad;
+ goto out_emit;
}
return;
-out_emit_bad:
- /*
- * Clear out token list and tell the parser to emit an error
- * indication by passing it a NULL list
- */
- json_message_free_tokens(parser);
out_emit:
- /* send current list of tokens to parser and reset tokenizer */
parser->brace_count = 0;
parser->bracket_count = 0;
- json = json_parser_parse(parser->tokens, parser->ap, &err);
+ json_message_free_tokens(parser);
parser->tokens = g_queue_new();
parser->token_size = 0;
parser->emit(parser->opaque, json, err);
--
2.17.1
- [Qemu-devel] [PATCH v2 02/60] check-qjson: Cover blank and lexically erroneous input, (continued)
- [Qemu-devel] [PATCH v2 02/60] check-qjson: Cover blank and lexically erroneous input, Markus Armbruster, 2018/08/17
- [Qemu-devel] [PATCH v2 06/60] test-qga: Clean up how we test QGA synchronization, Markus Armbruster, 2018/08/17
- [Qemu-devel] [PATCH v2 04/60] qmp-cmd-test: Split off qmp-test, Markus Armbruster, 2018/08/17
- [Qemu-devel] [PATCH v2 05/60] qmp-test: Cover syntax and lexical errors, Markus Armbruster, 2018/08/17
- [Qemu-devel] [PATCH v2 14/60] check-qjson qmp-test: Cover control characters more thoroughly, Markus Armbruster, 2018/08/17
- [Qemu-devel] [PATCH v2 09/60] check-qjson: Cover escaped characters more thoroughly, part 2, Markus Armbruster, 2018/08/17
- [Qemu-devel] [PATCH v2 42/60] json: Improve names of lexer states related to numbers, Markus Armbruster, 2018/08/17
- [Qemu-devel] [PATCH v2 34/60] json: Don't pass null @tokens to json_parser_parse(),
Markus Armbruster <=
- [Qemu-devel] [PATCH v2 23/60] json: Leave rejecting invalid UTF-8 to parser, Markus Armbruster, 2018/08/17
- [Qemu-devel] [PATCH v2 30/60] json: remove useless return value from lexer/parser, Markus Armbruster, 2018/08/17
- [Qemu-devel] [PATCH v2 25/60] json: Leave rejecting invalid escape sequences to parser, Markus Armbruster, 2018/08/17
- [Qemu-devel] [PATCH v2 38/60] json: Pass lexical errors and limit violations to callback, Markus Armbruster, 2018/08/17
- [Qemu-devel] [PATCH v2 44/60] json: Fix latent parser aborts at end of input, Markus Armbruster, 2018/08/17
- [Qemu-devel] [PATCH v2 28/60] json: Fix \uXXXX for surrogate pairs, Markus Armbruster, 2018/08/17