From 52f9c6fdb0e5748406134e093e9fb791af14d300 Mon Sep 17 00:00:00 2001 From: cuiweixie Date: Mon, 26 Sep 2022 22:49:08 +0800 Subject: [PATCH] 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 --- src/syscall/syscall_windows.go | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) 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 { -- 2.50.0