From: Patrick McHardy Date: Mon, 12 Jan 2015 12:09:17 +0000 (+0000) Subject: evaluate: check that map expressions' datatype matches mappings X-Git-Tag: v0.5~81 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=5424f775729a1bc9b72111eb9dfa2b1ffe201e30;p=thirdparty%2Fnftables.git evaluate: check that map expressions' datatype matches mappings Catch type errors in map expressions using named maps: # nft add map filter test { type ipv4_addr : inet_service; } # nft filter output mark set tcp dport map @test :1:38-42: Error: datatype mismatch, map expects IPv4 address, mapping expression has type internet network service filter output mark set tcp dport map @test ~~~~~~~~~ ^^^^^ Signed-off-by: Patrick McHardy --- diff --git a/src/evaluate.c b/src/evaluate.c index 2067a011..90c87d09 100644 --- a/src/evaluate.c +++ b/src/evaluate.c @@ -748,6 +748,13 @@ static int expr_evaluate_map(struct eval_ctx *ctx, struct expr **expr) map->mappings->ops->name); } + if (!datatype_equal(map->map->dtype, map->mappings->set->keytype)) + return expr_binary_error(ctx->msgs, map->mappings, map->map, + "datatype mismatch, map expects %s, " + "mapping expression has type %s", + map->mappings->set->keytype->desc, + map->map->dtype->desc); + map->dtype = map->mappings->set->datatype; map->flags |= EXPR_F_CONSTANT;