From cbd76447fd46b7ed60c63dab95d7119f2420fc23 Mon Sep 17 00:00:00 2001 From: Simon Kelley Date: Mon, 21 Jun 2021 00:01:51 +0100 Subject: [PATCH] Further work from a0a3b8ad3e91db5181023fceea6732eb6c6f0759 When query longer than longest domain, crop directly to length of longest domain. --- src/domain-match.c | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) diff --git a/src/domain-match.c b/src/domain-match.c index 644c10f..834daf5 100644 --- a/src/domain-match.c +++ b/src/domain-match.c @@ -127,7 +127,12 @@ int lookup_domain(char *qdomain, int flags, int *lowout, int *highout) if (rc < 0) { if (high == try) - break; + { + /* qdomain is longer or same length as longest domain, and try == 0 + crop the query to the longest domain. */ + crop_query = qlen - daemon->serverarray[try]->domain_len; + break; + } high = try; } else @@ -151,9 +156,7 @@ int lookup_domain(char *qdomain, int flags, int *lowout, int *highout) { if (old != (len = daemon->serverarray[try]->domain_len)) { - /* crop_query must be at least one always. */ - if (qlen != len) - crop_query = qlen - len; + crop_query = qlen - len; break; } } @@ -179,6 +182,10 @@ int lookup_domain(char *qdomain, int flags, int *lowout, int *highout) } } + /* crop_query must be at least one always. */ + if (crop_query == 0) + crop_query = 1; + qlen -= crop_query; if (leading_dot) {