Kai Blin : ws2_32: ws_sockaddr_u2ws should zero the sockaddr_in. sin_zero field.

Alexandre Julliard julliard at wine.codeweavers.com
Wed Dec 20 08:55:02 CST 2006


Module: wine
Branch: master
Commit: 6055c667e9aae3245ba3069219a021f2e5467420
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=6055c667e9aae3245ba3069219a021f2e5467420

Author: Kai Blin <kai.blin at gmail.com>
Date:   Wed Dec 20 14:08:13 2006 +0100

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(+), 0 deletions(-)

diff --git a/dlls/ws2_32/socket.c b/dlls/ws2_32/socket.c
index 76e60cc..d4d6595 100644
--- a/dlls/ws2_32/socket.c
+++ b/dlls/ws2_32/socket.c
@@ -1017,6 +1017,7 @@ static int ws_sockaddr_u2ws(const struct
         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 45331e9..3a7c4db 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();
 }




More information about the wine-cvs mailing list