json: Fix lexer for lookahead character beyond '\x7F'
authorMarkus Armbruster <armbru@redhat.com>
Fri, 31 Aug 2018 07:58:36 +0000 (09:58 +0200)
committerMarkus Armbruster <armbru@redhat.com>
Mon, 24 Sep 2018 16:06:09 +0000 (18:06 +0200)
commit2a96042a8da60b625cc9dbbdab3b03cd7586e34f
tree6898e02ca090dea38418e31785f09b17c2d3faed
parentd5a515738ee2dec0cdf11d8a14a09abae6c20571
json: Fix lexer for lookahead character beyond '\x7F'

The lexer fails to end a valid token when the lookahead character is
beyond '\x7F'.  For instance, input

    true\xC2\xA2

produces the tokens

    JSON_ERROR     true\xC2
    JSON_ERROR     \xA2

This should be

    JSON_KEYWORD   true
    JSON_ERROR     \xC2
    JSON_ERROR     \xA2

instead.

The culprit is

    #define TERMINAL(state) [0 ... 0x7F] = (state)

It leaves [0x80..0xFF] zero, i.e. IN_ERROR.  Has always been broken.
Fix it to initialize the complete array.

Signed-off-by: Markus Armbruster <armbru@redhat.com>
Reviewed-by: Eric Blake <eblake@redhat.com>
Message-Id: <20180831075841.13363-2-armbru@redhat.com>
qobject/json-lexer.c