diff options
Diffstat (limited to 'qobject')
-rw-r--r-- | qobject/json-lexer.c | 44 | ||||
-rw-r--r-- | qobject/json-parser.c | 1 |
2 files changed, 7 insertions, 38 deletions
diff --git a/qobject/json-lexer.c b/qobject/json-lexer.c index 7c31c2c8ff..f1a4b5a430 100644 --- a/qobject/json-lexer.c +++ b/qobject/json-lexer.c @@ -93,7 +93,8 @@ * (apostrophe) instead of %x22 (quotation mark), and can't contain * unescaped apostrophe, but can contain unescaped quotation mark. * - Interpolation, if enabled: - * interpolation = %((l|ll|I64)[du]|[ipsf]) + * The lexer accepts %[A-Za-z0-9]*, and leaves rejecting invalid + * ones to the parser. * * Note: * - Input must be encoded in modified UTF-8. @@ -116,11 +117,6 @@ enum json_lexer_state { IN_NEG_NONZERO_NUMBER, IN_KEYWORD, IN_INTERP, - IN_INTERP_L, - IN_INTERP_LL, - IN_INTERP_I, - IN_INTERP_I6, - IN_INTERP_I64, IN_WHITESPACE, IN_START, IN_START_INTERP, /* must be IN_START + 1 */ @@ -224,39 +220,11 @@ static const uint8_t json_lexer[][256] = { }, /* interpolation */ - [IN_INTERP_LL] = { - ['d'] = JSON_INTERP, - ['u'] = JSON_INTERP, - }, - - [IN_INTERP_L] = { - ['d'] = JSON_INTERP, - ['l'] = IN_INTERP_LL, - ['u'] = JSON_INTERP, - }, - - [IN_INTERP_I64] = { - ['d'] = JSON_INTERP, - ['u'] = JSON_INTERP, - }, - - [IN_INTERP_I6] = { - ['4'] = IN_INTERP_I64, - }, - - [IN_INTERP_I] = { - ['6'] = IN_INTERP_I6, - }, - [IN_INTERP] = { - ['d'] = JSON_INTERP, - ['i'] = JSON_INTERP, - ['p'] = JSON_INTERP, - ['s'] = JSON_INTERP, - ['u'] = JSON_INTERP, - ['f'] = JSON_INTERP, - ['l'] = IN_INTERP_L, - ['I'] = IN_INTERP_I, + TERMINAL(JSON_INTERP), + ['A' ... 'Z'] = IN_INTERP, + ['a' ... 'z'] = IN_INTERP, + ['0' ... '9'] = IN_INTERP, }, /* diff --git a/qobject/json-parser.c b/qobject/json-parser.c index 2855eaaeca..e61cee9e8a 100644 --- a/qobject/json-parser.c +++ b/qobject/json-parser.c @@ -453,6 +453,7 @@ static QObject *parse_interpolation(JSONParserContext *ctxt, va_list *ap) } else if (!strcmp(token->str, "%f")) { return QOBJECT(qnum_from_double(va_arg(*ap, double))); } + parse_error(ctxt, token, "invalid interpolation '%s'", token->str); return NULL; } |