summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAnders K. Pedersen <akp@cohaesio.com>2016-10-29 09:49:09 +0000
committerPablo Neira Ayuso <pablo@netfilter.org>2016-10-31 14:57:30 +0100
commitea9f60be2a31ed06198c22e2cd60d68866d0fdb3 (patch)
tree0d45e856e9f73049f457e51a55a2ee0191250f8a
parent6c00ab9db921c1a2059eb3ea45769a12e0597236 (diff)
evaluate: Allow concatenation of rt nexthop etc.
Concatenations of rt nexthop or ct {orignal | reply} {saddr | daddr} fail due to # nft add rule ip filter postrouting flow table acct \{ ip saddr . rt nexthop counter \} <cmdline>:1:61-70: Error: can not use variable sized data types (invalid) in concat expressions add rule ip filter postrouting flow table acct { ip saddr . rt nexthop counter } ~~~~~~~~~~~^^^^^^^^^^ Fix this by reordering the check for variable size data types in expr_evaluate_concat() to happen after expr_evaluate() has been called (via list_member_evaluate()) for the sub expression. This allows expr_evaluate_[cr]t() to call [cr]t_expr_update_type() and set the data type before the check. Signed-off-by: Anders K. Pedersen <akp@cohaesio.com> Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
-rw-r--r--src/evaluate.c14
1 files changed, 7 insertions, 7 deletions
diff --git a/src/evaluate.c b/src/evaluate.c
index 79add5ee..878efacd 100644
--- a/src/evaluate.c
+++ b/src/evaluate.c
@@ -987,13 +987,6 @@ static int expr_evaluate_concat(struct eval_ctx *ctx, struct expr **expr)
"expecting %s",
dtype->desc);
- if (dtype == NULL && i->dtype->size == 0)
- return expr_binary_error(ctx->msgs, i, *expr,
- "can not use variable sized "
- "data types (%s) in concat "
- "expressions",
- i->dtype->name);
-
if (dtype == NULL)
tmp = datatype_lookup(TYPE_INVALID);
else
@@ -1004,6 +997,13 @@ static int expr_evaluate_concat(struct eval_ctx *ctx, struct expr **expr)
return -1;
flags &= i->flags;
+ if (dtype == NULL && i->dtype->size == 0)
+ return expr_binary_error(ctx->msgs, i, *expr,
+ "can not use variable sized "
+ "data types (%s) in concat "
+ "expressions",
+ i->dtype->name);
+
ntype = concat_subtype_add(ntype, i->dtype->type);
}