diff options
author | Anthony Liguori <aliguori@us.ibm.com> | 2011-06-01 12:14:51 -0500 |
---|---|---|
committer | Anthony Liguori <aliguori@us.ibm.com> | 2011-06-07 13:52:10 -0500 |
commit | 55f8301f7665eeef6d454cf4843c3f67b067f357 (patch) | |
tree | a08e67e894b0912bd4eaab0b9429f758715ed2fc | |
parent | ef749d07e717ca38b7d8b525c81d6b04db5f16ed (diff) | |
download | qemu-55f8301f7665eeef6d454cf4843c3f67b067f357.tar.gz qemu-55f8301f7665eeef6d454cf4843c3f67b067f357.tar.bz2 qemu-55f8301f7665eeef6d454cf4843c3f67b067f357.zip |
json-streamer: allow recovery after bad input
Once we detect a malformed message, make sure to reset our state.
Signed-off-by: Michael Roth <mdroth@linux.vnet.ibm.com>
Signed-off-by: Anthony Liguori <aliguori@us.ibm.com>
-rw-r--r-- | json-streamer.c | 8 |
1 files changed, 6 insertions, 2 deletions
diff --git a/json-streamer.c b/json-streamer.c index f7e7a68d40..549e9b7f1e 100644 --- a/json-streamer.c +++ b/json-streamer.c @@ -51,8 +51,12 @@ static void json_message_process_token(JSONLexer *lexer, QString *token, JSONTok qlist_append(parser->tokens, dict); - if (parser->brace_count == 0 && - parser->bracket_count == 0) { + if (parser->brace_count < 0 || + parser->bracket_count < 0 || + (parser->brace_count == 0 && + parser->bracket_count == 0)) { + parser->brace_count = 0; + parser->bracket_count = 0; parser->emit(parser, parser->tokens); QDECREF(parser->tokens); parser->tokens = qlist_new(); |