From: Brad Fitzpatrick Date: Tue, 23 Apr 2019 14:57:09 +0000 (+0000) Subject: net: don't crash on Windows when Lookup name has null byte in string X-Git-Tag: go1.13beta1~580 X-Git-Url: http://www.git.cypherpunks.su/?a=commitdiff_plain;h=2e11881269d3ed30816a8ae8b7bedf9fbe55b995;p=gostls13.git net: don't crash on Windows when Lookup name has null byte in string Fixes #31597 Change-Id: I0db1f6f457632c49f9ecfa9d85b99b4cf7d91325 Reviewed-on: https://go-review.googlesource.com/c/go/+/173362 Run-TryBot: Brad Fitzpatrick Reviewed-by: Alex Brainman --- diff --git a/src/net/lookup_test.go b/src/net/lookup_test.go index ed477a78c9..dd599c7c1c 100644 --- a/src/net/lookup_test.go +++ b/src/net/lookup_test.go @@ -1184,3 +1184,13 @@ func TestWithUnexpiredValuesPreserved(t *testing.T) { t.Errorf("Lookup after expiry: Got %v want nil", g) } } + +// Issue 31586: don't crash on null byte in name +func TestLookupNullByte(t *testing.T) { + testenv.MustHaveExternalNetwork(t) + testenv.SkipFlakyNet(t) + _, err := LookupHost("foo\x00bar") // used to crash on Windows + if err == nil { + t.Errorf("unexpected success") + } +} diff --git a/src/net/lookup_windows.go b/src/net/lookup_windows.go index cd071c54b0..5ebd4b7853 100644 --- a/src/net/lookup_windows.go +++ b/src/net/lookup_windows.go @@ -101,7 +101,11 @@ func (r *Resolver) lookupIP(ctx context.Context, network, name string) ([]IPAddr Protocol: syscall.IPPROTO_IP, } var result *syscall.AddrinfoW - e := syscall.GetAddrInfoW(syscall.StringToUTF16Ptr(name), nil, &hints, &result) + name16p, err := syscall.UTF16PtrFromString(name) + if err != nil { + return nil, &DNSError{Name: name, Err: err.Error()} + } + e := syscall.GetAddrInfoW(name16p, nil, &hints, &result) if e != nil { err := winError("getaddrinfow", e) dnsError := &DNSError{Err: err.Error(), Name: name}