From: Pablo Neira Ayuso Date: Mon, 18 Apr 2016 10:08:18 +0000 (+0200) Subject: segtree: handle adjacent interval nodes from expr_value_cmp() X-Git-Tag: v0.6~59 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=0e5f289df9080476b5b33db40fece5f265890806;p=thirdparty%2Fnftables.git 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 --- 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)