]> git.ipfire.org Git - thirdparty/nftables.git/commitdiff
parser: properly fix handling of large integer values
authorPatrick McHardy <kaber@trash.net>
Sun, 11 Jan 2015 23:59:10 +0000 (23:59 +0000)
committerPatrick McHardy <kaber@trash.net>
Sun, 11 Jan 2015 23:59:10 +0000 (23:59 +0000)
Introduction of the ERROR symbol is an ugly hack. There's no reason
to special case large integer values, the NUM token only exists for
small values that are needed immediately, everything else is passed
as EXPR_SYMBOL to evaluation anyways.

Additionally the error reporting is different from what we'd usually
report, the token is easy to confuse with the bison internal error
token and it even has a name, messing up bison internal diagnostics.

Simply return values to large to be handled by strtoull as STRING.

Signed-off-by: Patrick McHardy <kaber@trash.net>
src/parser_bison.y
src/scanner.l

index 6c46d09819f257163b1531454bca104eb6261e6f..fd2407c86f934a05e6751cb46f90889c74d8779c 100644 (file)
@@ -211,8 +211,7 @@ static void location_update(struct location *loc, struct location *rhs, int n)
 %token <val> NUM               "number"
 %token <string> STRING         "string"
 %token <string> QUOTED_STRING
-%token <string> ERROR          "error"
-%destructor { xfree($$); }     STRING QUOTED_STRING ERROR
+%destructor { xfree($$); }     STRING QUOTED_STRING
 
 %token LL_HDR                  "ll"
 %token NETWORK_HDR             "nh"
@@ -471,8 +470,6 @@ static void location_update(struct location *loc, struct location *rhs, int n)
 %destructor { expr_free($$); } list_expr
 %type <expr>                   concat_expr map_lhs_expr
 %destructor { expr_free($$); } concat_expr map_lhs_expr
-%type <expr>                   error_expr
-%destructor { expr_free($$); } error_expr
 
 %type <expr>                   map_expr
 %destructor { expr_free($$); } map_expr
@@ -1690,16 +1687,6 @@ expr                     :       concat_expr
                        |       set_expr
                        |       map_expr
                        |       multiton_expr
-                       |       error_expr
-                       ;
-
-error_expr             :       ERROR
-                       {
-                               $$ = NULL;
-                               erec_queue(error(&@1, "bad value '%s'", $1),
-                                          state->msgs);
-                               YYERROR;
-                       }
                        ;
 
 set_expr               :       '{'     set_list_expr           '}'
index 52b0078311d6cd2291be4a6d9d968b8e3f2187e3..73c4f8b1431e6a4aeafafef1fc79c55fad1199cd 100644 (file)
@@ -462,7 +462,7 @@ addrstring  ({macaddr}|{ip4addr}|{ip6addr})
                                yylval->val = strtoull(yytext, NULL, 0);
                                if (errno != 0) {
                                        yylval->string = xstrdup(yytext);
-                                       return ERROR;
+                                       return STRING;
                                }
                                return NUM;
                        }
@@ -472,7 +472,7 @@ addrstring  ({macaddr}|{ip4addr}|{ip6addr})
                                yylval->val = strtoull(yytext, NULL, 0);
                                if (errno != 0) {
                                        yylval->string = xstrdup(yytext);
-                                       return ERROR;
+                                       return STRING;
                                }
                                return NUM;
                        }