]> git.ipfire.org Git - thirdparty/nftables.git/commitdiff
expression: replace compound_expr_print() by type safe function
authorPablo Neira Ayuso <pablo@netfilter.org>
Wed, 13 Aug 2025 13:20:43 +0000 (15:20 +0200)
committerPablo Neira Ayuso <pablo@netfilter.org>
Wed, 27 Aug 2025 21:52:08 +0000 (23:52 +0200)
Replace compound_expr_print() by {list,set,concat}_expr_print() to
validate expression type.

Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
src/expression.c

index d9456d6b0ef245b85566c5b39d8d1c5e993344c2..92ab40e24d95f0e544b5480a8a3e496143510dc8 100644 (file)
@@ -1027,19 +1027,6 @@ struct expr *compound_expr_alloc(const struct location *loc,
        return expr;
 }
 
-static void compound_expr_print(const struct expr *expr, const char *delim,
-                                struct output_ctx *octx)
-{
-       const struct expr *i;
-       const char *d = "";
-
-       list_for_each_entry(i, &expr->expr_set.expressions, list) {
-               nft_print(octx, "%s", d);
-               expr_print(i, octx);
-               d = delim;
-       }
-}
-
 static void concat_expr_destroy(struct expr *expr)
 {
        struct expr *i, *next;
@@ -1050,7 +1037,14 @@ static void concat_expr_destroy(struct expr *expr)
 
 static void concat_expr_print(const struct expr *expr, struct output_ctx *octx)
 {
-       compound_expr_print(expr, " . ", octx);
+       const struct expr *i;
+       const char *d = "";
+
+       list_for_each_entry(i, &expr_concat(expr)->expressions, list) {
+               nft_print(octx, "%s", d);
+               expr_print(i, octx);
+               d = " . ";
+       }
 }
 
 static void concat_expr_clone(struct expr *new, const struct expr *expr)
@@ -1244,7 +1238,14 @@ void concat_expr_remove(struct expr *concat, struct expr *expr)
 
 static void list_expr_print(const struct expr *expr, struct output_ctx *octx)
 {
-       compound_expr_print(expr, ",", octx);
+       const struct expr *i;
+       const char *d = "";
+
+       list_for_each_entry(i, &expr_list(expr)->expressions, list) {
+               nft_print(octx, "%s", d);
+               expr_print(i, octx);
+               d = ",";
+       }
 }
 
 static void list_expr_clone(struct expr *new, const struct expr *expr)