From edf64f6c65e1ebd31713ece236df3de8f7ace444 Mon Sep 17 00:00:00 2001 From: Florian Westphal Date: Wed, 18 Apr 2018 14:07:09 +0200 Subject: evaluate: reset eval context when evaluating set definitions David reported nft chokes on this: nft -f /tmp/A /tmp/A:9:22-45: Error: datatype mismatch, expected concatenation of (IPv4 address, internet network service, IPv4 address), expression has type concatenation of (IPv4 address, internet network service) cat /tmp/A flush ruleset; table ip filter { set setA { type ipv4_addr . inet_service . ipv4_addr flags timeout } set setB { type ipv4_addr . inet_service flags timeout } } Problem is we leak set definition details of setA to setB via eval context, so reset this. Also add test case for this. Reported-by: David Fabian Signed-off-by: Florian Westphal --- src/evaluate.c | 1 + 1 file changed, 1 insertion(+) (limited to 'src/evaluate.c') diff --git a/src/evaluate.c b/src/evaluate.c index db63494c..aee5b1c1 100644 --- a/src/evaluate.c +++ b/src/evaluate.c @@ -2974,6 +2974,7 @@ static int table_evaluate(struct eval_ctx *ctx, struct table *table) ctx->table = table; list_for_each_entry(set, &table->sets, list) { + expr_set_context(&ctx->ectx, NULL, 0); handle_merge(&set->handle, &table->handle); if (set_evaluate(ctx, set) < 0) return -1; -- cgit v1.2.3