traverse: apply code review fixes in ResolveNS dispatch loop
CI / test (pull_request) Failing after 1m28s

- Add RespNSResolutionFailed to the error-type guard in ResolveNS so
  nameserver resolution failures are treated consistently with SERVFAIL
  and RespError (skip + continue rather than fall through).
- Deduplicate nsName extraction before the err/len branches so it is
  computed once instead of twice.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Co-authored-by: multica-agent <github@multica.ai>
This commit is contained in:
Gary Hansen
2026-06-08 15:57:23 +10:00
co-authored by Copilot multica-agent
parent beefaf44e0
commit b481905848
+5 -9
View File
@@ -232,11 +232,11 @@ func (t *Traverser) processReferral(ctx context.Context, ref *Referral, cache *I
ref.State = StateResolved ref.State = StateResolved
} else { } else {
addrs, err := t.ResolveNS(ctx, ref.Name, cache, visitedCopy, t.depth) addrs, err := t.ResolveNS(ctx, ref.Name, cache, visitedCopy, t.depth)
nsName := strings.TrimSuffix(ref.Bailiwick, ".")
if nsName == "" || nsName == "." {
nsName = strings.TrimSuffix(ref.Name, ".")
}
if err != nil { if err != nil {
nsName := strings.TrimSuffix(ref.Bailiwick, ".")
if nsName == "" || nsName == "." {
nsName = strings.TrimSuffix(ref.Name, ".")
}
return &Response{ return &Response{
Referral: ref, Referral: ref,
Type: RespNSResolutionFailed, Type: RespNSResolutionFailed,
@@ -247,10 +247,6 @@ func (t *Traverser) processReferral(ctx context.Context, ref *Referral, cache *I
ref.Addresses = addrs ref.Addresses = addrs
ref.State = StateResolved ref.State = StateResolved
} else { } else {
nsName := strings.TrimSuffix(ref.Bailiwick, ".")
if nsName == "" || nsName == "." {
nsName = strings.TrimSuffix(ref.Name, ".")
}
return &Response{ return &Response{
Referral: ref, Referral: ref,
Type: RespNSResolutionFailed, Type: RespNSResolutionFailed,
@@ -371,7 +367,7 @@ func (t *Traverser) ResolveNS(ctx context.Context, nsName string, cache *InfoCac
break break
} }
if resp.Type == RespSERVFAIL || resp.Type == RespError { if resp.Type == RespSERVFAIL || resp.Type == RespError || resp.Type == RespNSResolutionFailed {
lastErr = fmt.Errorf("server error resolving %s: %s", nsName, resp.Type) lastErr = fmt.Errorf("server error resolving %s: %s", nsName, resp.Type)
continue continue
} }