diff options
author | Russ Cox <rsc@golang.org> | 2016-01-06 20:50:11 -0500 |
---|---|---|
committer | Russ Cox <rsc@golang.org> | 2016-01-08 16:19:20 +0000 |
commit | bb8c2e19a7fe2ca2283eca44dba2047c9f4307fe (patch) | |
tree | 1126536a5b6aa5d308487c6b84c25bc4193af240 /src/net/lookup.go | |
parent | d75acd67eccbfe6f03b6474baea3b569cd0135d6 (diff) | |
download | go-bb8c2e19a7fe2ca2283eca44dba2047c9f4307fe.tar.gz go-bb8c2e19a7fe2ca2283eca44dba2047c9f4307fe.zip |
net: ensure that malformed domain names report a consistent error
Previously it depended on whether we were using the Go resolver or the Cgo resolver.
Fixes #12421.
Change-Id: Ib162e336f30f736d7244e29d96651c3be11fc3cd
Reviewed-on: https://go-review.googlesource.com/18383
Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org>
Diffstat (limited to 'src/net/lookup.go')
-rw-r--r-- | src/net/lookup.go | 21 |
1 files changed, 21 insertions, 0 deletions
diff --git a/src/net/lookup.go b/src/net/lookup.go index 7aa111ba92..b5d77e02ea 100644 --- a/src/net/lookup.go +++ b/src/net/lookup.go @@ -33,6 +33,9 @@ func LookupHost(host string) (addrs []string, err error) { if ip := ParseIP(host); ip != nil { return []string{host}, nil } + if !isDomainName(host) { + return nil, &DNSError{Err: "invalid domain name", Name: host} + } return lookupHost(host) } @@ -47,6 +50,9 @@ func LookupIP(host string) (ips []IP, err error) { if ip := ParseIP(host); ip != nil { return []IP{ip}, nil } + if !isDomainName(host) { + return nil, &DNSError{Err: "invalid domain name", Name: host} + } addrs, err := lookupIPMerge(host) if err != nil { return @@ -146,6 +152,9 @@ func LookupPort(network, service string) (port int, err error) { // LookupHost or LookupIP directly; both take care of resolving // the canonical name as part of the lookup. func LookupCNAME(name string) (cname string, err error) { + if !isDomainName(name) { + return "", &DNSError{Err: "invalid domain name", Name: name} + } return lookupCNAME(name) } @@ -159,21 +168,33 @@ func LookupCNAME(name string) (cname string, err error) { // publishing SRV records under non-standard names, if both service // and proto are empty strings, LookupSRV looks up name directly. func LookupSRV(service, proto, name string) (cname string, addrs []*SRV, err error) { + if !isDomainName(name) { + return "", nil, &DNSError{Err: "invalid domain name", Name: name} + } return lookupSRV(service, proto, name) } // LookupMX returns the DNS MX records for the given domain name sorted by preference. func LookupMX(name string) (mxs []*MX, err error) { + if !isDomainName(name) { + return nil, &DNSError{Err: "invalid domain name", Name: name} + } return lookupMX(name) } // LookupNS returns the DNS NS records for the given domain name. func LookupNS(name string) (nss []*NS, err error) { + if !isDomainName(name) { + return nil, &DNSError{Err: "invalid domain name", Name: name} + } return lookupNS(name) } // LookupTXT returns the DNS TXT records for the given domain name. func LookupTXT(name string) (txts []string, err error) { + if !isDomainName(name) { + return nil, &DNSError{Err: "invalid domain name", Name: name} + } return lookupTXT(name) } |