From 6055c667e9aae3245ba3069219a021f2e5467420 Mon Sep 17 00:00:00 2001 From: Kai Blin Date: Wed, 20 Dec 2006 14:08:13 +0100 Subject: [PATCH] ws2_32: ws_sockaddr_u2ws should zero the sockaddr_in.sin_zero field. --- dlls/ws2_32/socket.c | 1 + dlls/ws2_32/tests/sock.c | 48 ++++++++++++++++++++++++++++++++++++++++ 2 files changed, 49 insertions(+) diff --git a/dlls/ws2_32/socket.c b/dlls/ws2_32/socket.c index 76e60ccc2a7..d4d659567c0 100644 --- a/dlls/ws2_32/socket.c +++ b/dlls/ws2_32/socket.c @@ -1017,6 +1017,7 @@ static int ws_sockaddr_u2ws(const struct sockaddr* uaddr, int uaddrlen, struct W win->sin_family = WS_AF_INET; win->sin_port = uin->sin_port; memcpy(&win->sin_addr,&uin->sin_addr,4); /* 4 bytes = 32 address bits */ + memset(&win->sin_zero, 0, 8); /* Make sure the null padding is null */ *wsaddrlen = sizeof(struct WS_sockaddr_in); return 0; } diff --git a/dlls/ws2_32/tests/sock.c b/dlls/ws2_32/tests/sock.c index 45331e95710..3a7c4dbbd8e 100644 --- a/dlls/ws2_32/tests/sock.c +++ b/dlls/ws2_32/tests/sock.c @@ -1565,6 +1565,53 @@ static void test_extendedSocketOptions() WSACleanup(); } +static void test_getsockname() +{ + WSADATA wsa; + SOCKET sock; + struct sockaddr_in sa_set, sa_get; + int sa_set_len = sizeof(struct sockaddr_in); + int sa_get_len = sa_set_len; + static const unsigned char null_padding[] = {0,0,0,0,0,0,0,0}; + + if(WSAStartup(MAKEWORD(2,0), &wsa)){ + trace("Winsock failed: 0x%08x. Aborting test\n", WSAGetLastError()); + return; + } + + memset(&sa_set, 0, sa_set_len); + + sa_set.sin_family = AF_INET; + sa_set.sin_port = htons(0); + sa_set.sin_addr.s_addr = htonl(INADDR_ANY); + + if((sock = socket(PF_INET, SOCK_STREAM, IPPROTO_IP)) < 0){ + trace("Creating the socket failed: 0x%08x\n", WSAGetLastError()); + WSACleanup(); + return; + } + + if(bind(sock, (struct sockaddr *) &sa_set, sa_set_len) < 0){ + trace("Failed to bind socket: 0x%08x\n", WSAGetLastError()); + closesocket(sock); + WSACleanup(); + return; + } + + if(getsockname(sock, (struct sockaddr *) &sa_get, &sa_get_len) != 0){ + trace("Failed to call getsockname: 0x%08X\n", WSAGetLastError()); + closesocket(sock); + WSACleanup(); + return; + } + + ok(memcmp(sa_get.sin_zero, null_padding, 8) == 0, + "getsockname did not zero the sockaddr_in structure\n"); + + closesocket(sock); + WSACleanup(); +} + /**************** Main program ***************/ START_TEST( sock ) @@ -1595,6 +1642,7 @@ START_TEST( sock ) test_select(); test_accept(); + test_getsockname(); Exit(); }