Alistair Leslie-Hughes : ws2_32: Accept shouldn' t fail when addrlen32 is NULL.
Module: wine Branch: master Commit: f9d40575740fba3e48c5ab2638e630b4a24f3126 URL: http://source.winehq.org/git/wine.git/?a=commit;h=f9d40575740fba3e48c5ab2638... Author: Alistair Leslie-Hughes <leslie_alistair(a)hotmail.com> Date: Wed Sep 7 04:31:42 2016 +0000 ws2_32: Accept shouldn't fail when addrlen32 is NULL. Signed-off-by: Alistair Leslie-Hughes <leslie_alistair(a)hotmail.com> Signed-off-by: Bruno Jesus <00cpxxx(a)gmail.com> Signed-off-by: Alexandre Julliard <julliard(a)winehq.org> --- dlls/ws2_32/socket.c | 2 +- dlls/ws2_32/tests/sock.c | 15 ++++++++++++++- 2 files changed, 15 insertions(+), 2 deletions(-) diff --git a/dlls/ws2_32/socket.c b/dlls/ws2_32/socket.c index ccd50f8..f0dc04f 100644 --- a/dlls/ws2_32/socket.c +++ b/dlls/ws2_32/socket.c @@ -2653,7 +2653,7 @@ SOCKET WINAPI WS_accept(SOCKET s, struct WS_sockaddr *addr, int *addrlen32) SERVER_END_REQ; if (!status) { - if (addr && WS_getpeername(as, addr, addrlen32)) + if (addr && addrlen32 && WS_getpeername(as, addr, addrlen32)) { WS_closesocket(as); return SOCKET_ERROR; diff --git a/dlls/ws2_32/tests/sock.c b/dlls/ws2_32/tests/sock.c index 98ff7c7..be98691 100644 --- a/dlls/ws2_32/tests/sock.c +++ b/dlls/ws2_32/tests/sock.c @@ -4068,7 +4068,7 @@ static void test_accept(void) int ret; SOCKET server_socket, accepted = INVALID_SOCKET, connector; struct sockaddr_in address; - SOCKADDR_STORAGE ss; + SOCKADDR_STORAGE ss, ss_empty; int socklen; select_thread_params thread_params; HANDLE thread_handle = NULL; @@ -4199,6 +4199,19 @@ static void test_accept(void) ok(accepted != INVALID_SOCKET, "Failed to accept connection, %d\n", WSAGetLastError()); ok(socklen != sizeof(ss), "unexpected length\n"); ok(ss.ss_family, "family not set\n"); + closesocket(accepted); + closesocket(connector); + accepted = connector = INVALID_SOCKET; + + socklen = sizeof(address); + connector = setup_connector_socket(&address, socklen, FALSE); + if (connector == INVALID_SOCKET) goto done; + + memset(&ss, 0, sizeof(ss)); + memset(&ss_empty, 0, sizeof(ss_empty)); + accepted = accept(server_socket, (struct sockaddr *)&ss, NULL); + ok(accepted != INVALID_SOCKET, "Failed to accept connection, %d\n", WSAGetLastError()); + ok(!memcmp(&ss, &ss_empty, sizeof(ss)), "structure is different\n"); done: if (accepted != INVALID_SOCKET)
participants (1)
-
Alexandre Julliard