From: cuiweixie Date: Mon, 26 Sep 2022 14:49:08 +0000 (+0800) Subject: syscall: check if to is nil to prevent panic from WSASendto X-Git-Tag: go1.20rc1~934 X-Git-Url: http://www.git.cypherpunks.su/?a=commitdiff_plain;h=52f9c6fdb0e5748406134e093e9fb791af14d300;p=gostls13.git syscall: check if to is nil to prevent panic from WSASendto 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 Auto-Submit: Dmitri Shuralyov Run-TryBot: xie cui <523516579@qq.com> TryBot-Result: Gopher Robot Run-TryBot: Ian Lance Taylor Reviewed-by: Tobias Klauser --- diff --git a/src/syscall/syscall_windows.go b/src/syscall/syscall_windows.go index 420fd9e4bb..9547ae0720 100644 --- a/src/syscall/syscall_windows.go +++ b/src/syscall/syscall_windows.go @@ -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 {