]> git.ipfire.org Git - thirdparty/nftables.git/commitdiff
evaluate: set evaluation context for set elements
authorFlorian Westphal <fw@strlen.de>
Wed, 3 Feb 2021 16:57:07 +0000 (17:57 +0100)
committerFlorian Westphal <fw@strlen.de>
Tue, 16 Feb 2021 14:11:31 +0000 (15:11 +0100)
This resolves same issue as previous patch when such
expression is used as a set key:

        set z {
                typeof ct zone
-               elements = { 1, 512, 768, 1024, 1280, 1536 }
+               elements = { 1, 2, 3, 4, 5, 6 }
        }

Signed-off-by: Florian Westphal <fw@strlen.de>
src/evaluate.c

index 0ab94ab88e68eeee6b2348090835e8e4378b49a4..cebf7cb8ef2c58878fcebb9eb869f0cfb57bc28d 100644 (file)
@@ -1393,8 +1393,15 @@ static int expr_evaluate_set_elem(struct eval_ctx *ctx, struct expr **expr)
 {
        struct expr *elem = *expr;
 
-       if (ctx->set && __expr_evaluate_set_elem(ctx, elem) < 0)
-               return -1;
+       if (ctx->set) {
+               const struct expr *key;
+
+               if (__expr_evaluate_set_elem(ctx, elem) < 0)
+                       return -1;
+
+               key = ctx->set->key;
+               __expr_set_context(&ctx->ectx, key->dtype, key->byteorder, key->len, 0);
+       }
 
        if (expr_evaluate(ctx, &elem->key) < 0)
                return -1;