Commit 6733c40d authored by Dan Kegel's avatar Dan Kegel Committed by Alexandre Julliard

ws2_32: Null select() should fail with WSAEINVAL.

parent d95e2dbd
...@@ -3496,7 +3496,11 @@ static struct pollfd *fd_sets_to_poll( const WS_fd_set *readfds, const WS_fd_set ...@@ -3496,7 +3496,11 @@ static struct pollfd *fd_sets_to_poll( const WS_fd_set *readfds, const WS_fd_set
if (writefds) count += writefds->fd_count; if (writefds) count += writefds->fd_count;
if (exceptfds) count += exceptfds->fd_count; if (exceptfds) count += exceptfds->fd_count;
*count_ptr = count; *count_ptr = count;
if (!count) return NULL; if (!count)
{
SetLastError(WSAEINVAL);
return NULL;
}
if (!(fds = HeapAlloc( GetProcessHeap(), 0, count * sizeof(fds[0])))) if (!(fds = HeapAlloc( GetProcessHeap(), 0, count * sizeof(fds[0]))))
{ {
SetLastError( ERROR_NOT_ENOUGH_MEMORY ); SetLastError( ERROR_NOT_ENOUGH_MEMORY );
...@@ -3619,7 +3623,7 @@ int WINAPI WS_select(int nfds, WS_fd_set *ws_readfds, ...@@ -3619,7 +3623,7 @@ int WINAPI WS_select(int nfds, WS_fd_set *ws_readfds,
TRACE("read %p, write %p, excp %p timeout %p\n", TRACE("read %p, write %p, excp %p timeout %p\n",
ws_readfds, ws_writefds, ws_exceptfds, ws_timeout); ws_readfds, ws_writefds, ws_exceptfds, ws_timeout);
if (!(pollfds = fd_sets_to_poll( ws_readfds, ws_writefds, ws_exceptfds, &count )) && count) if (!(pollfds = fd_sets_to_poll( ws_readfds, ws_writefds, ws_exceptfds, &count )))
return SOCKET_ERROR; return SOCKET_ERROR;
if (ws_timeout) if (ws_timeout)
......
...@@ -1943,6 +1943,17 @@ static void test_select(void) ...@@ -1943,6 +1943,17 @@ static void test_select(void)
FD_ZERO(&readfds); FD_ZERO(&readfds);
FD_ZERO(&writefds); FD_ZERO(&writefds);
FD_ZERO(&exceptfds); FD_ZERO(&exceptfds);
SetLastError(0);
ret = select(maxfd+1, 0, 0, 0, &select_timeout);
ok ( (ret == SOCKET_ERROR), "expected SOCKET_ERROR, got %i\n", ret);
ok ( GetLastError() == WSAEINVAL, "expected WSAEINVAL, got %i\n", ret);
SetLastError(0);
ret = select(maxfd+1, &readfds, &writefds, &exceptfds, &select_timeout);
ok ( (ret == SOCKET_ERROR), "expected SOCKET_ERROR, got %i\n", ret);
ok ( GetLastError() == WSAEINVAL, "expected WSAEINVAL, got %i\n", ret);
FD_SET(INVALID_SOCKET, &readfds); FD_SET(INVALID_SOCKET, &readfds);
SetLastError(0); SetLastError(0);
ret = select(maxfd+1, &readfds, &writefds, &exceptfds, &select_timeout); ret = select(maxfd+1, &readfds, &writefds, &exceptfds, &select_timeout);
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment