Message ID | 1453225976-23749-3-git-send-email-pablo@netfilter.org |
---|---|
State | RFC |
Delegated to: | Pablo Neira |
Headers | show |
diff --git a/src/segtree.c b/src/segtree.c index 060951c..86c37b4 100644 --- a/src/segtree.c +++ b/src/segtree.c @@ -483,8 +483,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)
If we have two elements with the same key, check the interval flag so we make sure that the one with the end flag set (ie. closing interval) comes before the one that starts it. This is required to decompose adjacent ranges the right way when listing sets from userspace. Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org> --- src/segtree.c | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-)