From b69606af412f43a225c1cf2044c90e317f41ae09 Mon Sep 17 00:00:00 2001 From: Matt Layher Date: Wed, 23 Oct 2019 09:52:06 -0400 Subject: [PATCH] unix: comply with -d=checkptr in Test_anyToSockaddr Rather than directly casting between types of different sizes, use an explicit copy in a helper function. Fixes golang/go#35106 Change-Id: I2293eb38fa53205ce069e2e5405262294c9ad412 Reviewed-on: https://go-review.googlesource.com/c/sys/+/202820 Run-TryBot: Matt Layher TryBot-Result: Gobot Gobot Reviewed-by: Tobias Klauser Reviewed-by: Bryan C. Mills Reviewed-by: Brad Fitzpatrick --- unix/syscall_internal_linux_test.go | 26 ++++++++++++++++++++------ 1 file changed, 20 insertions(+), 6 deletions(-) diff --git a/unix/syscall_internal_linux_test.go b/unix/syscall_internal_linux_test.go index 78545956..89982036 100644 --- a/unix/syscall_internal_linux_test.go +++ b/unix/syscall_internal_linux_test.go @@ -30,7 +30,7 @@ func Test_anyToSockaddr(t *testing.T) { }, { name: "AF_TIPC NameSeq", - rsa: (*RawSockaddrAny)(unsafe.Pointer(&RawSockaddrTIPC{ + rsa: sockaddrTIPCToAny(RawSockaddrTIPC{ Family: AF_TIPC, Addrtype: TIPC_SERVICE_RANGE, Scope: 1, @@ -39,7 +39,7 @@ func Test_anyToSockaddr(t *testing.T) { Lower: 2, Upper: 3, }).tipcAddr(), - })), + }), sa: &SockaddrTIPC{ Scope: 1, Addr: &TIPCServiceRange{ @@ -51,7 +51,7 @@ func Test_anyToSockaddr(t *testing.T) { }, { name: "AF_TIPC Name", - rsa: (*RawSockaddrAny)(unsafe.Pointer(&RawSockaddrTIPC{ + rsa: sockaddrTIPCToAny(RawSockaddrTIPC{ Family: AF_TIPC, Addrtype: TIPC_SERVICE_ADDR, Scope: 2, @@ -60,7 +60,7 @@ func Test_anyToSockaddr(t *testing.T) { Instance: 2, Domain: 3, }).tipcAddr(), - })), + }), sa: &SockaddrTIPC{ Scope: 2, Addr: &TIPCServiceName{ @@ -72,7 +72,7 @@ func Test_anyToSockaddr(t *testing.T) { }, { name: "AF_TIPC ID", - rsa: (*RawSockaddrAny)(unsafe.Pointer(&RawSockaddrTIPC{ + rsa: sockaddrTIPCToAny(RawSockaddrTIPC{ Family: AF_TIPC, Addrtype: TIPC_SOCKET_ADDR, Scope: 3, @@ -80,7 +80,7 @@ func Test_anyToSockaddr(t *testing.T) { Ref: 1, Node: 2, }).tipcAddr(), - })), + }), sa: &SockaddrTIPC{ Scope: 3, Addr: &TIPCSocketAddr{ @@ -214,3 +214,17 @@ func TestSockaddrTIPC_sockaddr(t *testing.T) { }) } } + +func sockaddrTIPCToAny(in RawSockaddrTIPC) *RawSockaddrAny { + var out RawSockaddrAny + + // Explicitly copy the contents of in into out to produce the correct + // sockaddr structure, without relying on unsafe casting to a type of a + // larger size. + copy( + (*(*[SizeofSockaddrAny]byte)(unsafe.Pointer(&out)))[:], + (*(*[SizeofSockaddrTIPC]byte)(unsafe.Pointer(&in)))[:], + ) + + return &out +}