Bruno Jesus : ws2_32: Fix some parameters checking in AcceptEx.

Alexandre Julliard julliard at winehq.org
Thu Feb 6 13:25:30 CST 2014


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

Author: Bruno Jesus <00cpxxx at gmail.com>
Date:   Wed Feb  5 22:38:54 2014 -0200

ws2_32: Fix some parameters checking in AcceptEx.

---

 dlls/ws2_32/socket.c     |    7 +++----
 dlls/ws2_32/tests/sock.c |    7 +------
 2 files changed, 4 insertions(+), 10 deletions(-)

diff --git a/dlls/ws2_32/socket.c b/dlls/ws2_32/socket.c
index ff5a533..1c558bf 100644
--- a/dlls/ws2_32/socket.c
+++ b/dlls/ws2_32/socket.c
@@ -2386,10 +2386,9 @@ static BOOL WINAPI WS2_AcceptEx(SOCKET listener, SOCKET acceptor, PVOID dest, DW
         return FALSE;
     }
 
-    if ((local_addr_len < sizeof(struct sockaddr_in) + 16)
-       || (rem_addr_len < sizeof(struct sockaddr_in) + 16))
+    if (!rem_addr_len)
     {
-        SetLastError(WSAEINVAL);
+        SetLastError(WSAEFAULT);
         return FALSE;
     }
 
@@ -2404,7 +2403,7 @@ static BOOL WINAPI WS2_AcceptEx(SOCKET listener, SOCKET acceptor, PVOID dest, DW
     fd = get_sock_fd( acceptor, FILE_READ_DATA, NULL );
     if (fd == -1)
     {
-        SetLastError(WSAEINVAL);
+        SetLastError(WSAENOTSOCK);
         return FALSE;
     }
     release_sock_fd( acceptor, fd );
diff --git a/dlls/ws2_32/tests/sock.c b/dlls/ws2_32/tests/sock.c
index 1c22503..cb67533 100644
--- a/dlls/ws2_32/tests/sock.c
+++ b/dlls/ws2_32/tests/sock.c
@@ -5935,8 +5935,7 @@ todo_wine
     bret = pAcceptEx(listener, INVALID_SOCKET, buffer, sizeof(buffer) - 2*(sizeof(struct sockaddr_in) + 16),
         sizeof(struct sockaddr_in) + 16, sizeof(struct sockaddr_in) + 16,
         &bytesReturned, &overlapped);
-todo_wine
-    ok(bret == FALSE && WSAGetLastError() == WSAENOTSOCK, "AcceptEx on invalid listening socket "
+    ok(bret == FALSE && WSAGetLastError() == WSAENOTSOCK, "AcceptEx on invalid accepting socket "
         "returned %d + errno %d\n", bret, WSAGetLastError());
 
     bret = pAcceptEx(listener, acceptor, NULL, sizeof(buffer) - 2*(sizeof(struct sockaddr_in) + 16),
@@ -5949,7 +5948,6 @@ todo_wine
 
     bret = pAcceptEx(listener, acceptor, buffer, 0, 0, sizeof(struct sockaddr_in) + 16,
         &bytesReturned, &overlapped);
-todo_wine
     ok(bret == FALSE && (WSAGetLastError() == ERROR_IO_PENDING || broken(WSAGetLastError() == WSAEINVAL)) /* NT4 */,
         "AcceptEx on too small local address size returned %d + errno %d\n",
         bret, WSAGetLastError());
@@ -5958,7 +5956,6 @@ todo_wine
 
     bret = pAcceptEx(listener, acceptor, buffer, 0, sizeof(struct sockaddr_in) + 15,
         sizeof(struct sockaddr_in) + 16, &bytesReturned, &overlapped);
-todo_wine
     ok(bret == FALSE && WSAGetLastError() == ERROR_IO_PENDING, "AcceptEx on too small local address "
         "size returned %d + errno %d\n",
         bret, WSAGetLastError());
@@ -5967,13 +5964,11 @@ todo_wine
 
     bret = pAcceptEx(listener, acceptor, buffer, 0, sizeof(struct sockaddr_in) + 16, 0,
         &bytesReturned, &overlapped);
-todo_wine
     ok(bret == FALSE && (WSAGetLastError() == WSAEFAULT || broken(WSAGetLastError() == WSAEINVAL)) /* NT4 */,
         "AcceptEx on too small remote address size returned %d + errno %d\n", bret, WSAGetLastError());
 
     bret = pAcceptEx(listener, acceptor, buffer, 0, sizeof(struct sockaddr_in) + 16,
         sizeof(struct sockaddr_in) + 15, &bytesReturned, &overlapped);
-todo_wine
     ok(bret == FALSE && (WSAGetLastError() == ERROR_IO_PENDING || broken(WSAGetLastError() == WSAEINVAL)) /* NT4 */,
         "AcceptEx on too small remote address size returned %d + errno %d\n", bret, WSAGetLastError());
     bret = CancelIo((HANDLE) listener);




More information about the wine-cvs mailing list