ws2_32: Cope with NULL address in connect() call.

Signed-off-by: Bruno Jesus <bjesus@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
This commit is contained in:
Bruno Jesus 2017-02-26 22:25:43 -03:00 committed by Alexandre Julliard
parent 5a06b6b035
commit dcf258685e
2 changed files with 10 additions and 2 deletions

View File

@ -1731,14 +1731,17 @@ static inline BOOL supported_protocol(int protocol)
/**********************************************************************/ /**********************************************************************/
/* Returns the length of the converted address if successful, 0 if it was too small to /* Returns the length of the converted address if successful, 0 if it was too
* start with. * small to start with or unknown family or invalid address buffer.
*/ */
static unsigned int ws_sockaddr_ws2u(const struct WS_sockaddr* wsaddr, int wsaddrlen, static unsigned int ws_sockaddr_ws2u(const struct WS_sockaddr* wsaddr, int wsaddrlen,
union generic_unix_sockaddr *uaddr) union generic_unix_sockaddr *uaddr)
{ {
unsigned int uaddrlen = 0; unsigned int uaddrlen = 0;
if (!wsaddr)
return 0;
switch (wsaddr->sa_family) switch (wsaddr->sa_family)
{ {
#ifdef HAS_IPX #ifdef HAS_IPX

View File

@ -5841,6 +5841,11 @@ static void test_events(int useMessages)
goto end; goto end;
} }
SetLastError(0xdeadbeef);
ret = connect(src, NULL, 0);
ok(ret == SOCKET_ERROR, "expected -1, got %d\n", ret);
ok(GetLastError() == WSAEFAULT, "expected 10014, got %d\n", GetLastError());
ret = connect(src, (struct sockaddr*)&addr, sizeof(addr)); ret = connect(src, (struct sockaddr*)&addr, sizeof(addr));
if (ret == SOCKET_ERROR && WSAGetLastError() != WSAEWOULDBLOCK) if (ret == SOCKET_ERROR && WSAGetLastError() != WSAEWOULDBLOCK)
{ {