From: Patrick McHardy Date: Wed, 27 Apr 2016 11:29:45 +0000 (+0100) Subject: set: allow non-constant implicit set declarations X-Git-Tag: v0.6~25 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=0ce93baa9f4db1acc393b185662b506aebbb759a;p=thirdparty%2Fnftables.git set: allow non-constant implicit set declarations Currently all implicitly declared sets are marked as constant. The flow statement needs to implicitly declare non-constant sets, so instead of unconditionally marking the set as constant, only do so if the declaring expression is itself a constant set. Signed-off-by: Patrick McHardy Signed-off-by: Pablo Neira Ayuso --- diff --git a/src/evaluate.c b/src/evaluate.c index 3afb8eade..c5f87a195 100644 --- a/src/evaluate.c +++ b/src/evaluate.c @@ -96,7 +96,7 @@ static struct expr *implicit_set_declaration(struct eval_ctx *ctx, struct handle h; set = set_alloc(&expr->location); - set->flags = SET_F_CONSTANT | SET_F_ANONYMOUS | expr->set_flags; + set->flags = SET_F_ANONYMOUS | expr->set_flags; set->handle.set = xstrdup(set->flags & SET_F_MAP ? "map%d" : "set%d"); set->keytype = keytype; set->keylen = keylen; @@ -1075,6 +1075,8 @@ static int expr_evaluate_set(struct eval_ctx *ctx, struct expr **expr) set->set_flags |= SET_F_INTERVAL; } + set->set_flags |= SET_F_CONSTANT; + set->dtype = ctx->ectx.dtype; set->len = ctx->ectx.len; set->flags |= EXPR_F_CONSTANT;