]> git.ipfire.org Git - thirdparty/nftables.git/commitdiff
evaluate: check that map expressions' datatype matches mappings
authorPatrick McHardy <kaber@trash.net>
Mon, 12 Jan 2015 12:09:17 +0000 (12:09 +0000)
committerPatrick McHardy <kaber@trash.net>
Mon, 12 Jan 2015 13:21:38 +0000 (13:21 +0000)
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
<cmdline>: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 <kaber@trash.net>
src/evaluate.c

index 2067a011c1a2b22c6d2ed29ffa887a71e3ca7ac8..90c87d09abf4e68938e31b439c13d9e6c96d54f7 100644 (file)
@@ -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;