From d85e1f0e2f389d273ff14e89faced390b76d842b Mon Sep 17 00:00:00 2001 From: Martin Mares Date: Thu, 27 Feb 2003 10:48:30 +0000 Subject: Prefix comparison bug (hopefully) fixed. --- filter/filter.c | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) (limited to 'filter/filter.c') diff --git a/filter/filter.c b/filter/filter.c index 25711c5..a50dce6 100644 --- a/filter/filter.c +++ b/filter/filter.c @@ -81,6 +81,8 @@ pm_path_compare(struct f_path_mask *m1, struct f_path_mask *m2) int val_compare(struct f_val v1, struct f_val v2) { + int rc; + if ((v1.type == T_VOID) && (v2.type == T_VOID)) return 0; if (v1.type == T_VOID) /* Hack for else */ @@ -100,8 +102,15 @@ val_compare(struct f_val v1, struct f_val v2) if (v1.val.i < v2.val.i) return -1; return 1; case T_IP: - case T_PREFIX: return ipa_compare(v1.val.px.ip, v2.val.px.ip); + case T_PREFIX: + if (rc = ipa_compare(v1.val.px.ip, v2.val.px.ip)) + return rc; + if (v1.val.px.len < v2.val.px.len) + return -1; + if (v1.val.px.len > v2.val.px.len) + return 1; + return 0; case T_PATH_MASK: return pm_path_compare(v1.val.path_mask, v2.val.path_mask); default: -- cgit v1.2.3