• M
    json: Leave rejecting invalid interpolation to parser · f7617d45
    Markus Armbruster 提交于
    Both lexer and parser reject invalid interpolation specifications.
    The parser's check is useless.
    
    The lexer ends the token right after the first bad character.  This
    tends to lead to suboptimal error reporting.  For instance, input
    
        [ %04d ]
    
    produces the tokens
    
        JSON_LSQUARE  [
        JSON_ERROR    %0
        JSON_INTEGER  4
        JSON_KEYWORD  d
        JSON_RSQUARE  ]
    
    The parser then yields an error, an object and two more errors:
    
        error: Invalid JSON syntax
        object: 4
        error: JSON parse error, invalid keyword
        error: JSON parse error, expecting value
    
    Dumb down the lexer to accept [A-Za-z0-9]*.  The parser's check is now
    used.  Emit a proper error there.
    
    The lexer now produces
    
        JSON_LSQUARE  [
        JSON_INTERP   %04d
        JSON_RSQUARE  ]
    
    and the parser reports just
    
        JSON parse error, invalid interpolation '%04d'
    Signed-off-by: NMarkus Armbruster <armbru@redhat.com>
    Reviewed-by: NEric Blake <eblake@redhat.com>
    Message-Id: <20180823164025.12553-41-armbru@redhat.com>
    f7617d45
json-lexer.c 10.4 KB