[PATCH nft 2/3] Revert "segtree: basic support for binary operations in concatenated set ranges"
Pablo Neira Ayuso <[email protected]>
| Newsgroups | gmane.comp.security.firewalls.netfilter.devel |
|---|---|
| Message-ID | <[email protected]> |
Handling binary expression from the interval set postprocessing step is
tricky, it is easier to handle set element key as value at that stage.
Revert 1de3568ef07f ("segtree: basic support for binary operations in
concatenated set ranges"), this only works for concatenated set ranges.
A follow up patch postpones the conversion from value to symbol for
TYPE_BITMASK expressions after the interval set postprocessing.
Fixes: 1de3568ef07f ("segtree: basic support for binary operations in concatenated set ranges")
Signed-off-by: Pablo Neira Ayuso <[email protected]>
---
src/segtree.c | 29 +++--------------------------
1 file changed, 3 insertions(+), 26 deletions(-)
diff --git a/src/segtree.c b/src/segtree.c
index 4f758e6c9f99..5e178fa3c48d 100644
--- a/src/segtree.c
+++ b/src/segtree.c
@@ -369,29 +369,6 @@ static int range_mask_len(const mpz_t start, const mpz_t end, unsigned int len)
return ret;
}
-static int concat_expr_cmp(const struct expr *r1, const struct expr *r2)
-{
- int ret;
-
- assert(r1->etype == r2->etype);
-
- switch (r1->etype) {
- case EXPR_BINOP:
- assert(r1->op == r2->op);
- ret = 0;
- ret = mpz_cmp(r1->left->value, r2->left->value);
- ret |= mpz_cmp(r1->right->value, r2->right->value);
- break;
- case EXPR_VALUE:
- ret = mpz_cmp(r1->value, r2->value);
- break;
- default:
- BUG("unexpected expression %s", expr_name(r1->key));
- }
-
- return ret;
-}
-
/* Given a set with two elements (start and end), transform them into a
* concatenation of ranges. That is, from a list of start expressions and a list
* of end expressions, form a list of start - end expressions.
@@ -431,13 +408,13 @@ void concat_range_aggregate(struct expr *set)
r2_next = r2->list.next;
free_r1 = 0;
- if (!concat_expr_cmp(r1, r2)) {
+ assert(r1->etype == EXPR_VALUE && r1->etype == EXPR_VALUE);
+
+ if (!mpz_cmp(r1->value, r2->value)) {
free_r1 = 1;
goto next;
}
- assert(r1->etype == EXPR_VALUE && r1->etype == EXPR_VALUE);
-
if (expr_basetype(r1)->type == TYPE_STRING &&
expr_basetype(r2)->type == TYPE_STRING) {
string_type = true;
--
2.47.3