aboutsummaryrefslogtreecommitdiff
path: root/libgo/go/net/dnsclient.go
diff options
context:
space:
mode:
Diffstat (limited to 'libgo/go/net/dnsclient.go')
-rw-r--r--libgo/go/net/dnsclient.go21
1 files changed, 10 insertions, 11 deletions
diff --git a/libgo/go/net/dnsclient.go b/libgo/go/net/dnsclient.go
index 1bbe396..a779c37 100644
--- a/libgo/go/net/dnsclient.go
+++ b/libgo/go/net/dnsclient.go
@@ -5,6 +5,7 @@
package net
import (
+ "internal/bytealg"
"internal/itoa"
"sort"
@@ -75,6 +76,11 @@ func equalASCIIName(x, y dnsmessage.Name) bool {
// (currently restricted to hostname-compatible "preferred name" LDH labels and
// SRV-like "underscore labels"; see golang.org/issue/12421).
func isDomainName(s string) bool {
+ // The root domain name is valid. See golang.org/issue/45715.
+ if s == "." {
+ return true
+ }
+
// See RFC 1035, RFC 3696.
// Presentation format has dots before every label except the first, and the
// terminal empty label is optional here because we assume fully-qualified
@@ -136,18 +142,11 @@ func isDomainName(s string) bool {
// It's hard to tell so we settle on the heuristic that names without dots
// (like "localhost" or "myhost") do not get trailing dots, but any other
// names do.
-func absDomainName(b []byte) string {
- hasDots := false
- for _, x := range b {
- if x == '.' {
- hasDots = true
- break
- }
- }
- if hasDots && b[len(b)-1] != '.' {
- b = append(b, '.')
+func absDomainName(s string) string {
+ if bytealg.IndexByteString(s, '.') != -1 && s[len(s)-1] != '.' {
+ s += "."
}
- return string(b)
+ return s
}
// An SRV represents a single DNS SRV record.