susumu.yata
null+****@clear*****
Wed Oct 7 11:17:21 JST 2015
susumu.yata 2015-10-07 11:17:21 +0900 (Wed, 07 Oct 2015) New Revision: e257c13cabd4430a5692cc6f38862af8e3a1feff https://github.com/groonga/groonga/commit/e257c13cabd4430a5692cc6f38862af8e3a1feff Message: grn_ts: add error handling in number literal tokenization Name characters must not appear immediately after a number literal. GitHub: #412 Modified files: lib/ts.c Modified: lib/ts.c (+9 -1) =================================================================== --- lib/ts.c 2015-10-07 11:53:26 +0900 (3b70a98) +++ lib/ts.c 2015-10-07 11:17:21 +0900 (12641e6) @@ -4879,6 +4879,10 @@ grn_ts_expr_parser_tokenize_number(grn_ctx *ctx, grn_ts_expr_parser *parser, int_value = strtol(str.ptr, &end, 0); if ((end != str.ptr) && (*end != '.')) { + if (grn_ts_byte_is_name_char(*end)) { + GRN_TS_ERR_RETURN(GRN_INVALID_FORMAT, "unterminated Int literal: %.*s", + (int)str.size, str.ptr); + } token_str.ptr = str.ptr; token_str.size = end - str.ptr; rc = grn_ts_expr_const_token_open(ctx, token_str, &new_token); @@ -4890,7 +4894,11 @@ grn_ts_expr_parser_tokenize_number(grn_ctx *ctx, grn_ts_expr_parser *parser, } else { grn_ts_float float_value = strtod(str.ptr, &end); if (end == str.ptr) { - return GRN_INVALID_FORMAT; + GRN_TS_ERR_RETURN(GRN_INVALID_FORMAT, "invalid number"); + } + if (grn_ts_byte_is_name_char(*end)) { + GRN_TS_ERR_RETURN(GRN_INVALID_FORMAT, "unterminated Float literal: %.*s", + (int)str.size, str.ptr); } token_str.ptr = str.ptr; token_str.size = end - str.ptr; -------------- next part -------------- HTML����������������������������...Download