summary refs log tree commit diff stats
path: root/json-streamer.c
diff options
context:
space:
mode:
authorAnthony Liguori <aliguori@us.ibm.com>2011-06-01 12:14:51 -0500
committerAnthony Liguori <aliguori@us.ibm.com>2011-06-07 13:52:10 -0500
commit55f8301f7665eeef6d454cf4843c3f67b067f357 (patch)
treea08e67e894b0912bd4eaab0b9429f758715ed2fc /json-streamer.c
parentef749d07e717ca38b7d8b525c81d6b04db5f16ed (diff)
downloadfocaccia-qemu-55f8301f7665eeef6d454cf4843c3f67b067f357.tar.gz
focaccia-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>
Diffstat (limited to 'json-streamer.c')
-rw-r--r--json-streamer.c8
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();