From 83cf8f53a86d911514c38483a58b9dc5146f560f Mon Sep 17 00:00:00 2001 From: Tony Garnock-Jones Date: Thu, 16 Feb 2012 15:24:21 -0500 Subject: [PATCH] Fix bug in loop-detection: the new TTL-updating was confusing the set --- proxy.rkt | 3 ++- resolver.rkt | 2 +- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/proxy.rkt b/proxy.rkt index 792eb39..dd7b1c9 100644 --- a/proxy.rkt +++ b/proxy.rkt @@ -190,10 +190,11 @@ (transition w (send-message (answered-question q #f)))] [(network-reply (== referral-id) ans) (define-values (new-zone ignored-timers) (incorporate-complete-answer ans zone)) + (define nameserver-names (for/set ([rr nameserver-rrs]) (rr-rdata rr))) (extend-transition (retry-question (struct-copy question-state w [nameservers-tried (set-union nameservers-tried - nameserver-rrs)] + nameserver-names)] [zone new-zone] [retry-count (+ old-retry-count 1)])) (unsubscribe referral-id))])))] diff --git a/resolver.rkt b/resolver.rkt index f53b030..21786f3 100644 --- a/resolver.rkt +++ b/resolver.rkt @@ -100,7 +100,7 @@ (define (closest-untried-nameservers q zone nameservers-tried) (define name (question-name q)) (define ns-rrset (closest-nameservers name zone)) - (set-subtract ns-rrset nameservers-tried)) + (for/set ([rr ns-rrset] #:when (not (set-member? nameservers-tried (rr-rdata rr)))) rr)) (define (empty-answer q zone start-of-authority) (if (and start-of-authority ;; we are authoritative for something