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

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

index d36eea97b421fbf470746071c161ee18ddd9e9d4..32812d288e890531b32b3c045f64d72eea6a05b4 100644 (file)
@@ -525,21 +525,23 @@ struct expr *range_expr_to_prefix(struct expr *range);
 
 extern struct expr *compound_expr_alloc(const struct location *loc,
                                        enum expr_types etypes);
-extern void compound_expr_remove(struct expr *compound, struct expr *expr);
 extern void list_expr_sort(struct list_head *head);
 extern void list_splice_sorted(struct list_head *list, struct list_head *head);
 
 extern struct expr *concat_expr_alloc(const struct location *loc);
 void concat_expr_add(struct expr *concat, struct expr *item);
+void concat_expr_remove(struct expr *concat, struct expr *expr);
 
 extern struct expr *list_expr_alloc(const struct location *loc);
 void list_expr_add(struct expr *expr, struct expr *item);
+void list_expr_remove(struct expr *expr, struct expr *item);
 struct expr *list_expr_to_binop(struct expr *expr);
 
 extern struct expr *set_expr_alloc(const struct location *loc,
                                   const struct set *set);
 void __set_expr_add(struct expr *set, struct expr *elem);
 void set_expr_add(struct expr *set, struct expr *elem);
+void set_expr_remove(struct expr *expr, struct expr *item);
 
 extern void concat_range_aggregate(struct expr *set);
 extern void interval_map_decompose(struct expr *set);
index bceb2a320da8f438fd398b39e4ca853966c233a2..016dfaa21048c303828613cf9c05c1574ad4714d 100644 (file)
@@ -1048,12 +1048,6 @@ static void compound_expr_print(const struct expr *expr, const char *delim,
        }
 }
 
-void compound_expr_remove(struct expr *compound, struct expr *expr)
-{
-       compound->expr_set.size--;
-       list_del(&expr->list);
-}
-
 static void concat_expr_destroy(struct expr *expr)
 {
        compound_expr_destroy(expr);
@@ -1247,6 +1241,12 @@ void concat_expr_add(struct expr *concat, struct expr *item)
        expr_concat->size++;
 }
 
+void concat_expr_remove(struct expr *concat, struct expr *expr)
+{
+       expr_concat(concat)->size--;
+       list_del(&expr->list);
+}
+
 static void list_expr_print(const struct expr *expr, struct output_ctx *octx)
 {
        compound_expr_print(expr, ",", octx);
@@ -1283,6 +1283,12 @@ void list_expr_add(struct expr *expr, struct expr *item)
        expr_list->size++;
 }
 
+void list_expr_remove(struct expr *list, struct expr *expr)
+{
+       expr_list(list)->size--;
+       list_del(&expr->list);
+}
+
 /* list is assumed to have two items at least, otherwise extend this! */
 struct expr *list_expr_to_binop(struct expr *expr)
 {
@@ -1433,6 +1439,12 @@ void set_expr_add(struct expr *set, struct expr *elem)
        expr_set->size++;
 }
 
+void set_expr_remove(struct expr *set, struct expr *expr)
+{
+       expr_set(set)->size--;
+       list_del(&expr->list);
+}
+
 static void mapping_expr_print(const struct expr *expr, struct output_ctx *octx)
 {
        expr_print(expr->left, octx);
index e6b14f5dd1202bdab7925f8ece95993e91325f63..88207a3987b8f51ab7868abda668eb5012e9bd19 100644 (file)
@@ -448,13 +448,13 @@ next:
                        mpz_clear(range);
 
                        r2 = list_entry(r2_next, typeof(*r2), list);
-                       compound_expr_remove(expr_value(start), r1);
+                       concat_expr_remove(expr_value(start), r1);
 
                        if (free_r1)
                                expr_free(r1);
                }
 
-               compound_expr_remove(set, start);
+               set_expr_remove(set, start);
                expr_free(start);
                start = NULL;
        }
@@ -584,7 +584,7 @@ void interval_map_decompose(struct expr *set)
                        catchall = i;
                        continue;
                }
-               compound_expr_remove(set, i);
+               set_expr_remove(set, i);
                elements[n++] = i;
        }
        qsort(elements, n, sizeof(elements[0]), expr_value_cmp);