From 5946b3930b4e568b61065ac4e3cda6f9006e3833 Mon Sep 17 00:00:00 2001 From: Pablo Neira Ayuso Date: Wed, 6 Jan 2021 14:58:36 +0100 Subject: segtree: honor set element expiration Extend c1f0476fd590 ("segtree: copy expr data to closing element") to use interval_expr_copy() from the linearization path. Reported-by: Mike Dillinger Signed-off-by: Pablo Neira Ayuso --- src/segtree.c | 34 ++++++++++++++-------------------- 1 file changed, 14 insertions(+), 20 deletions(-) diff --git a/src/segtree.c b/src/segtree.c index 6988d07b..9aa39e52 100644 --- a/src/segtree.c +++ b/src/segtree.c @@ -568,6 +568,18 @@ static void segtree_linearize(struct list_head *list, const struct set *set, mpz_clear(q); } +static void interval_expr_copy(struct expr *dst, struct expr *src) +{ + if (src->comment) + dst->comment = xstrdup(src->comment); + if (src->timeout) + dst->timeout = src->timeout; + if (src->expiration) + dst->expiration = src->expiration; + + list_splice_init(&src->stmt_list, &dst->stmt_list); +} + static void set_insert_interval(struct expr *set, struct seg_tree *tree, const struct elementary_interval *ei) { @@ -580,17 +592,11 @@ static void set_insert_interval(struct expr *set, struct seg_tree *tree, if (ei->expr != NULL) { if (ei->expr->etype == EXPR_MAPPING) { - if (ei->expr->left->comment) - expr->comment = xstrdup(ei->expr->left->comment); - if (ei->expr->left->timeout) - expr->timeout = ei->expr->left->timeout; + interval_expr_copy(expr, ei->expr->left); expr = mapping_expr_alloc(&ei->expr->location, expr, expr_get(ei->expr->right)); } else { - if (ei->expr->comment) - expr->comment = xstrdup(ei->expr->comment); - if (ei->expr->timeout) - expr->timeout = ei->expr->timeout; + interval_expr_copy(expr, ei->expr); } } @@ -927,18 +933,6 @@ next: } } -static void interval_expr_copy(struct expr *dst, struct expr *src) -{ - if (src->comment) - dst->comment = xstrdup(src->comment); - if (src->timeout) - dst->timeout = src->timeout; - if (src->expiration) - dst->expiration = src->expiration; - - list_splice_init(&src->stmt_list, &dst->stmt_list); -} - void interval_map_decompose(struct expr *set) { struct expr **elements, **ranges; -- cgit v1.2.3