summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorPablo Neira Ayuso <pablo@netfilter.org>2025-08-13 15:15:08 +0200
committerPablo Neira Ayuso <pablo@netfilter.org>2025-08-27 23:52:08 +0200
commite8c7a780d2755f5cccd7369f32f771bab2fcaf63 (patch)
treed5a6734b4b196c667eaa5dcdd7713aaa2b0af5cc
parent15479e66d20dda2ddd670159c5ef005320f2398c (diff)
src: replace compound_expr_add() by type safe list_expr_add()
Replace compound_expr_add() by list_expr_add() to validate type. Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
-rw-r--r--include/expression.h1
-rw-r--r--src/expression.c8
-rw-r--r--src/netlink_delinearize.c2
-rw-r--r--src/parser_bison.y20
-rw-r--r--src/parser_json.c6
-rw-r--r--src/trace.c10
6 files changed, 28 insertions, 19 deletions
diff --git a/include/expression.h b/include/expression.h
index 0d9e10d7..ad469db2 100644
--- a/include/expression.h
+++ b/include/expression.h
@@ -534,6 +534,7 @@ extern struct expr *concat_expr_alloc(const struct location *loc);
void concat_expr_add(struct expr *concat, struct expr *item);
extern struct expr *list_expr_alloc(const struct location *loc);
+void list_expr_add(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,
diff --git a/src/expression.c b/src/expression.c
index 95cdedaa..9521e67c 100644
--- a/src/expression.c
+++ b/src/expression.c
@@ -1272,6 +1272,14 @@ struct expr *list_expr_alloc(const struct location *loc)
return compound_expr_alloc(loc, EXPR_LIST);
}
+void list_expr_add(struct expr *expr, struct expr *item)
+{
+ struct expr_list *expr_list = expr_list(expr);
+
+ list_add_tail(&item->list, &expr_list->expressions);
+ expr_list->size++;
+}
+
/* list is assumed to have two items at least, otherwise extend this! */
struct expr *list_expr_to_binop(struct expr *expr)
{
diff --git a/src/netlink_delinearize.c b/src/netlink_delinearize.c
index ccccb67a..990edc82 100644
--- a/src/netlink_delinearize.c
+++ b/src/netlink_delinearize.c
@@ -2454,7 +2454,7 @@ static struct expr *binop_tree_to_list(struct expr *list, struct expr *expr)
} else {
if (list == NULL)
return expr_get(expr);
- compound_expr_add(list, expr_get(expr));
+ list_expr_add(list, expr_get(expr));
}
return list;
diff --git a/src/parser_bison.y b/src/parser_bison.y
index fd916f43..bdcce4c1 100644
--- a/src/parser_bison.y
+++ b/src/parser_bison.y
@@ -2503,11 +2503,11 @@ flowtable_expr : '{' flowtable_list_expr '}'
flowtable_list_expr : flowtable_expr_member
{
$$ = compound_expr_alloc(&@$, EXPR_LIST);
- compound_expr_add($$, $1);
+ list_expr_add($$, $1);
}
| flowtable_list_expr COMMA flowtable_expr_member
{
- compound_expr_add($1, $3);
+ list_expr_add($1, $3);
$$ = $1;
}
| flowtable_list_expr COMMA opt_newline
@@ -2842,14 +2842,14 @@ dev_spec : DEVICE string
YYERROR;
$$ = compound_expr_alloc(&@$, EXPR_LIST);
- compound_expr_add($$, expr);
+ list_expr_add($$, expr);
}
| DEVICE variable_expr
{
datatype_set($2->sym->expr, &ifname_type);
$$ = compound_expr_alloc(&@$, EXPR_LIST);
- compound_expr_add($$, $2);
+ list_expr_add($$, $2);
}
| DEVICES '=' flowtable_expr
{
@@ -5199,13 +5199,13 @@ relational_expr : expr /* implicit */ rhs_expr
list_rhs_expr : basic_rhs_expr COMMA basic_rhs_expr
{
$$ = list_expr_alloc(&@$);
- compound_expr_add($$, $1);
- compound_expr_add($$, $3);
+ list_expr_add($$, $1);
+ list_expr_add($$, $3);
}
| list_rhs_expr COMMA basic_rhs_expr
{
$1->location = @$;
- compound_expr_add($1, $3);
+ list_expr_add($1, $3);
$$ = $1;
}
;
@@ -5763,13 +5763,13 @@ symbol_stmt_expr : symbol_expr
list_stmt_expr : symbol_stmt_expr COMMA symbol_stmt_expr
{
$$ = list_expr_alloc(&@$);
- compound_expr_add($$, $1);
- compound_expr_add($$, $3);
+ list_expr_add($$, $1);
+ list_expr_add($$, $3);
}
| list_stmt_expr COMMA symbol_stmt_expr
{
$1->location = @$;
- compound_expr_add($1, $3);
+ list_expr_add($1, $3);
$$ = $1;
}
;
diff --git a/src/parser_json.c b/src/parser_json.c
index 6ed1841c..c107dfc8 100644
--- a/src/parser_json.c
+++ b/src/parser_json.c
@@ -1704,7 +1704,7 @@ static struct expr *json_parse_expr(struct json_ctx *ctx, json_t *root)
expr_free(list);
return NULL;
}
- compound_expr_add(list, expr);
+ list_expr_add(list, expr);
}
return list;
case JSON_TRUE:
@@ -3038,7 +3038,7 @@ static struct expr *json_parse_devs(struct json_ctx *ctx, json_t *root)
return NULL;
}
- compound_expr_add(expr, tmp);
+ list_expr_add(expr, tmp);
return expr;
}
if (!json_is_array(root)) {
@@ -3059,7 +3059,7 @@ static struct expr *json_parse_devs(struct json_ctx *ctx, json_t *root)
expr_free(expr);
return NULL;
}
- compound_expr_add(expr, tmp);
+ list_expr_add(expr, tmp);
}
return expr;
}
diff --git a/src/trace.c b/src/trace.c
index 47f4c215..051cc12d 100644
--- a/src/trace.c
+++ b/src/trace.c
@@ -268,11 +268,11 @@ static struct expr *trace_alloc_list(const struct datatype *dtype,
if (bitv == 0)
continue;
- compound_expr_add(list_expr,
- constant_expr_alloc(&netlink_location,
- dtype, byteorder,
- len * BITS_PER_BYTE,
- &bitv));
+ list_expr_add(list_expr,
+ constant_expr_alloc(&netlink_location,
+ dtype, byteorder,
+ len * BITS_PER_BYTE,
+ &bitv));
}
mpz_clear(value);