summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorPablo Neira Ayuso <pablo@netfilter.org>2014-11-30 22:52:20 +0100
committerPablo Neira Ayuso <pablo@netfilter.org>2014-12-01 17:28:25 +0100
commit178bf85812ba426aba887157e0dbc5ab26b61561 (patch)
treed4c94b6bc64e84cb3efc4bf31da8aec2c4368ffb /src
parentf77294ee03545141caf046df8c789ed494357627 (diff)
scanner: don't bug on too large values
Add a new ERROR symbol to handle scanning of too large values. <cmdline>:1:36-99: Error: bad value '0xaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa' add rule ip test-ip4 input ct mark 0xaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ instead of: BUG: nft: scanner.l:470: nft_lex: Assertion `0' failed. Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
Diffstat (limited to 'src')
-rw-r--r--src/parser_bison.y15
-rw-r--r--src/scanner.l12
2 files changed, 22 insertions, 5 deletions
diff --git a/src/parser_bison.y b/src/parser_bison.y
index ad2951a1..6c7a036a 100644
--- a/src/parser_bison.y
+++ b/src/parser_bison.y
@@ -209,7 +209,8 @@ static void location_update(struct location *loc, struct location *rhs, int n)
%token <val> NUM "number"
%token <string> STRING "string"
%token <string> QUOTED_STRING
-%destructor { xfree($$); } STRING QUOTED_STRING
+%token <string> ERROR "error"
+%destructor { xfree($$); } STRING QUOTED_STRING ERROR
%token LL_HDR "ll"
%token NETWORK_HDR "nh"
@@ -465,6 +466,8 @@ 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
@@ -1668,6 +1671,16 @@ 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 '}'
diff --git a/src/scanner.l b/src/scanner.l
index 2fafa71a..72b54471 100644
--- a/src/scanner.l
+++ b/src/scanner.l
@@ -459,16 +459,20 @@ addrstring ({macaddr}|{ip4addr}|{ip6addr})
{decstring} {
errno = 0;
yylval->val = strtoull(yytext, NULL, 0);
- if (errno != 0)
- BUG();
+ if (errno != 0) {
+ yylval->string = xstrdup(yytext);
+ return ERROR;
+ }
return NUM;
}
{hexstring} {
errno = 0;
yylval->val = strtoull(yytext, NULL, 0);
- if (errno != 0)
- BUG();
+ if (errno != 0) {
+ yylval->string = xstrdup(yytext);
+ return ERROR;
+ }
return NUM;
}