ipn/ipnlocal: fix pretty printing of multi-record peer DNS results

The API on the DNS record parser is slightly subtle and requires
explicit handling of unhandled records. Failure to advance previously
resulted in an infinite loop in the pretty responder for any reply that
contains a record other than A/AAAA/TXT.

Updates tailscale/corp#16928

Signed-off-by: James Tucker <james@tailscale.com>
This commit is contained in:
James Tucker
2024-01-31 13:49:52 -08:00
committed by James Tucker
parent fad6bae764
commit b4b2ec7801
2 changed files with 88 additions and 14 deletions
+7
View File
@@ -1054,6 +1054,9 @@ func writePrettyDNSReply(w io.Writer, res []byte) (err error) {
return err
}
if h.Class != dnsmessage.ClassINET {
if err := p.SkipAnswer(); err != nil {
return err
}
continue
}
switch h.Type {
@@ -1075,6 +1078,10 @@ func writePrettyDNSReply(w io.Writer, res []byte) (err error) {
return err
}
gotIPs = append(gotIPs, r.TXT...)
default:
if err := p.SkipAnswer(); err != nil {
return err
}
}
}
j, _ := json.Marshal(gotIPs)