From: Phil Sutter <phil@nwl.cc>
To: Pablo Neira Ayuso <pablo@netfilter.org>
Cc: netfilter-devel@vger.kernel.org
Subject: [nft PATCH] parser_bison: Avoid set references in odd places
Date: Sat, 16 Nov 2019 21:02:07 +0100 [thread overview]
Message-ID: <20191116200207.6501-1-phil@nwl.cc> (raw)
With set references being recognized by symbol_expr and that being part
of primary_expr as well as primary_rhs_expr, they could basically occur
anywhere while in fact they are allowed only in quite a few spots.
Untangle things a bit by introducing set_ref_expr and adding that only
in places where it is needed to pass testsuites.
Signed-off-by: Phil Sutter <phil@nwl.cc>
---
src/parser_bison.y | 27 +++++++++++++--------------
1 file changed, 13 insertions(+), 14 deletions(-)
diff --git a/src/parser_bison.y b/src/parser_bison.y
index 3f2832564036e..220ffafef135b 100644
--- a/src/parser_bison.y
+++ b/src/parser_bison.y
@@ -645,6 +645,8 @@ int nft_lex(void *, void *, void *);
%destructor { expr_free($$); } exclusive_or_expr inclusive_or_expr
%type <expr> basic_expr
%destructor { expr_free($$); } basic_expr
+%type <expr> set_ref_expr
+%destructor { expr_free($$); } set_ref_expr
%type <expr> multiton_rhs_expr
%destructor { expr_free($$); } multiton_rhs_expr
@@ -2439,13 +2441,7 @@ verdict_map_expr : '{' verdict_map_list_expr '}'
$2->location = @$;
$$ = $2;
}
- | AT identifier
- {
- $$ = symbol_expr_alloc(&@$, SYMBOL_SET,
- current_scope(state),
- $2);
- xfree($2);
- }
+ | set_ref_expr
;
verdict_map_list_expr : verdict_map_list_member_expr
@@ -3014,7 +3010,7 @@ concat_stmt_expr : basic_stmt_expr
;
map_stmt_expr_set : set_expr
- | symbol_expr
+ | set_ref_expr
;
map_stmt_expr : concat_stmt_expr MAP map_stmt_expr_set
@@ -3241,21 +3237,21 @@ set_elem_expr_stmt_alloc: concat_expr
}
;
-set_stmt : SET set_stmt_op set_elem_expr_stmt symbol_expr
+set_stmt : SET set_stmt_op set_elem_expr_stmt set_ref_expr
{
$$ = set_stmt_alloc(&@$);
$$->set.op = $2;
$$->set.key = $3;
$$->set.set = $4;
}
- | set_stmt_op symbol_expr '{' set_elem_expr_stmt '}'
+ | set_stmt_op set_ref_expr '{' set_elem_expr_stmt '}'
{
$$ = set_stmt_alloc(&@$);
$$->set.op = $1;
$$->set.key = $4;
$$->set.set = $2;
}
- | set_stmt_op symbol_expr '{' set_elem_expr_stmt stateful_stmt '}'
+ | set_stmt_op set_ref_expr '{' set_elem_expr_stmt stateful_stmt '}'
{
$$ = set_stmt_alloc(&@$);
$$->set.op = $1;
@@ -3270,7 +3266,7 @@ set_stmt_op : ADD { $$ = NFT_DYNSET_OP_ADD; }
| DELETE { $$ = NFT_DYNSET_OP_DELETE; }
;
-map_stmt : set_stmt_op symbol_expr '{' set_elem_expr_stmt COLON set_elem_expr_stmt '}'
+map_stmt : set_stmt_op set_ref_expr '{' set_elem_expr_stmt COLON set_elem_expr_stmt '}'
{
$$ = map_stmt_alloc(&@$);
$$->map.op = $1;
@@ -3278,7 +3274,7 @@ map_stmt : set_stmt_op symbol_expr '{' set_elem_expr_stmt COLON set_elem_expr_s
$$->map.data = $6;
$$->map.set = $2;
}
- | set_stmt_op symbol_expr '{' set_elem_expr_stmt stateful_stmt COLON set_elem_expr_stmt '}'
+ | set_stmt_op set_ref_expr '{' set_elem_expr_stmt stateful_stmt COLON set_elem_expr_stmt '}'
{
$$ = map_stmt_alloc(&@$);
$$->map.op = $1;
@@ -3378,7 +3374,9 @@ symbol_expr : variable_expr
$1);
xfree($1);
}
- | AT identifier
+ ;
+
+set_ref_expr : AT identifier
{
$$ = symbol_expr_alloc(&@$, SYMBOL_SET,
current_scope(state),
@@ -3903,6 +3901,7 @@ list_rhs_expr : basic_rhs_expr COMMA basic_rhs_expr
rhs_expr : concat_rhs_expr { $$ = $1; }
| multiton_rhs_expr { $$ = $1; }
| set_expr { $$ = $1; }
+ | set_ref_expr { $$ = $1; }
;
shift_rhs_expr : primary_rhs_expr
--
2.24.0
reply other threads:[~2019-11-16 20:02 UTC|newest]
Thread overview: [no followups] expand[flat|nested] mbox.gz Atom feed
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20191116200207.6501-1-phil@nwl.cc \
--to=phil@nwl.cc \
--cc=netfilter-devel@vger.kernel.org \
--cc=pablo@netfilter.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).