]> Cypherpunks repositories - gostls13.git/commitdiff
syscall: check if to is nil to prevent panic from WSASendto
authorcuiweixie <cuiweixie@gmail.com>
Mon, 26 Sep 2022 14:49:08 +0000 (22:49 +0800)
committerGopher Robot <gobot@golang.org>
Mon, 26 Sep 2022 20:42:40 +0000 (20:42 +0000)
to is an optional pointer to sockaddr, as written in the doc:
https://learn.microsoft.com/en-us/windows/win32/api/winsock2/nf-winsock2-wsasendto

For #55845

Change-Id: Ia685cec8d9bc9ff313f598db9d2213a1f409757a
Reviewed-on: https://go-review.googlesource.com/c/go/+/434535
Reviewed-by: Ian Lance Taylor <iant@google.com>
Auto-Submit: Dmitri Shuralyov <dmitshur@golang.org>
Run-TryBot: xie cui <523516579@qq.com>
TryBot-Result: Gopher Robot <gobot@golang.org>
Run-TryBot: Ian Lance Taylor <iant@google.com>
Reviewed-by: Tobias Klauser <tobias.klauser@gmail.com>
src/syscall/syscall_windows.go

index 420fd9e4bb36c1b6c6027277e740fb845374564f..9547ae0720d90c37d3aa2b267a2cffa0800acf4c 100644 (file)
@@ -916,9 +916,13 @@ func Shutdown(fd Handle, how int) (err error) {
 }
 
 func WSASendto(s Handle, bufs *WSABuf, bufcnt uint32, sent *uint32, flags uint32, to Sockaddr, overlapped *Overlapped, croutine *byte) (err error) {
-       rsa, len, err := to.sockaddr()
-       if err != nil {
-               return err
+       var rsa unsafe.Pointer
+       var len int32
+       if to != nil {
+               rsa, len, err = to.sockaddr()
+               if err != nil {
+                       return err
+               }
        }
        r1, _, e1 := Syscall9(procWSASendTo.Addr(), 9, uintptr(s), uintptr(unsafe.Pointer(bufs)), uintptr(bufcnt), uintptr(unsafe.Pointer(sent)), uintptr(flags), uintptr(unsafe.Pointer(rsa)), uintptr(len), uintptr(unsafe.Pointer(overlapped)), uintptr(unsafe.Pointer(croutine)))
        if r1 == socket_error {