[Groonga-commit] groonga/groonga at e257c13 [master] grn_ts: add error handling in number literal tokenization

Back to archive index

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 



More information about the Groonga-commit mailing list
Back to archive index