]> Cypherpunks repositories - gostls13.git/commitdiff
net: don't crash on Windows when Lookup name has null byte in string
authorBrad Fitzpatrick <bradfitz@golang.org>
Tue, 23 Apr 2019 14:57:09 +0000 (14:57 +0000)
committerBrad Fitzpatrick <bradfitz@golang.org>
Tue, 23 Apr 2019 22:02:01 +0000 (22:02 +0000)
Fixes #31597

Change-Id: I0db1f6f457632c49f9ecfa9d85b99b4cf7d91325
Reviewed-on: https://go-review.googlesource.com/c/go/+/173362
Run-TryBot: Brad Fitzpatrick <bradfitz@golang.org>
Reviewed-by: Alex Brainman <alex.brainman@gmail.com>
src/net/lookup_test.go
src/net/lookup_windows.go

index ed477a78c9e79a0db7bc2b2b4d5822e0b4421473..dd599c7c1c21baf6530e280b5d0c98ee744edcda 100644 (file)
@@ -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")
+       }
+}
index cd071c54b00f2dfe960201aaaa609a9b9b729131..5ebd4b78536932c87a51be47785b9e8dff0ce7dd 100644 (file)
@@ -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}