summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorPablo Neira Ayuso <pablo@netfilter.org>2016-04-18 12:08:18 +0200
committerPablo Neira Ayuso <pablo@netfilter.org>2016-04-25 15:48:23 +0200
commit0e5f289df9080476b5b33db40fece5f265890806 (patch)
tree3a0a3ad26b8237f6245aff82097523ec09d6528b
parentea827f01f13fba941c25a3af51d5c65895362723 (diff)
segtree: handle adjacent interval nodes from expr_value_cmp()
Named sets may contain adjacent interval nodes, when equal in key, look at the flags. Those with EXPR_F_INTERVAL_END should come in first place. Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
-rw-r--r--src/segtree.c9
1 files changed, 8 insertions, 1 deletions
diff --git a/src/segtree.c b/src/segtree.c
index 75f02b94..d8f98faa 100644
--- a/src/segtree.c
+++ b/src/segtree.c
@@ -487,8 +487,15 @@ static int expr_value_cmp(const void *p1, const void *p2)
{
struct expr *e1 = *(void * const *)p1;
struct expr *e2 = *(void * const *)p2;
+ int ret;
- return mpz_cmp(expr_value(e1)->value, expr_value(e2)->value);
+ ret = mpz_cmp(expr_value(e1)->value, expr_value(e2)->value);
+ if (ret == 0 && (e1->flags & EXPR_F_INTERVAL_END))
+ return -1;
+ else
+ return 1;
+
+ return ret;
}
void interval_map_decompose(struct expr *set)