From 8f3d8ceae7e089b6d7cf33cf1449f3f711db51e1 Mon Sep 17 00:00:00 2001 From: Sami Kerola Date: Wed, 13 Jun 2012 21:36:37 +0200 Subject: [PATCH] analyze: a lot of IP counts being missed Fix to a very severe bug. In cases when IP addresses in lease file had a range of using highest bit, e.g. signed int minus, the sort caused high ranges to be counted first and low ranges skipped. The usual case when this happen was when ranges contained 10.0.0.0/8 addresses together with addresses greater than 128.0.0.0/32. Reported-by: Ryan Malek Signed-off-by: Sami Kerola --- src/analyze.c | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/analyze.c b/src/analyze.c index 5f8d7ab..ad5bab8 100644 --- a/src/analyze.c +++ b/src/analyze.c @@ -44,7 +44,11 @@ /* Clean up data */ int ip_sort(struct leases_t *a, struct leases_t *b) { - return (a->ip - b->ip); + if (a->ip < b->ip) + return -1; + if (a->ip > b->ip) + return 1; + return 0; } int prepare_data(void)