json-lexer: make lexer error-recovery more deterministic
commitb011f61931f0113b29b7cd7e921dd022e0b04834
authorMichael Roth <mdroth@linux.vnet.ibm.com>
Wed, 1 Jun 2011 17:14:58 +0000 (1 12:14 -0500)
committerAnthony Liguori <aliguori@us.ibm.com>
Tue, 7 Jun 2011 18:52:11 +0000 (7 13:52 -0500)
treee1e2a9a0329d29e8aaa06b06aa0209a3022fc8de
parentbd3924a33a66c40065a8fa73b4d7a27aca3b0e04
json-lexer: make lexer error-recovery more deterministic

Currently when we reach an error state we effectively flush everything
fed to the lexer, which can put us in a state where we keep feeding
tokens into the parser at arbitrary offsets in the stream. This makes it
difficult for the lexer/tokenizer/parser to get back in sync when bad
input is made by the client.

With these changes we emit an error state/token up to the tokenizer as
soon as we reach an error state, and continue processing any data passed
in rather than bailing out. The reset token will be used to reset the
tokenizer and parser, such that they'll recover state as soon as the
lexer begins generating valid token sequences again.

We also map chr(192,193,245-255) to an error state here, since they are
invalid UTF-8 characters. QMP guest proxy/agent will use chr(255) to
force a flush/reset of previous input for reliable delivery of certain
events, so also we document that thoroughly here.

Signed-off-by: Michael Roth <mdroth@linux.vnet.ibm.com>
Signed-off-by: Anthony Liguori <aliguori@us.ibm.com>
json-lexer.c
json-lexer.h