diff options
Diffstat (limited to 'libssh')
-rw-r--r-- | libssh/poll.c | 8 |
1 files changed, 6 insertions, 2 deletions
diff --git a/libssh/poll.c b/libssh/poll.c index 24bc56f..b4e37cd 100644 --- a/libssh/poll.c +++ b/libssh/poll.c @@ -146,9 +146,13 @@ static int bsd_poll(ssh_pollfd_t *fds, nfds_t nfds, int timeout) { /* compute fd_sets and find largest descriptor */ for (rc = -1, max_fd = 0, i = 0; i < nfds; i++) { - if (fds[i].fd == SSH_INVALID_SOCKET || fds[i].fd >= FD_SETSIZE) { + if (fds[i].fd == SSH_INVALID_SOCKET) { continue; } + if (fds[i].fd >= FD_SETSIZE) { + rc = -1; + break; + } if (fds[i].events & (POLLIN | POLLRDNORM)) { FD_SET (fds[i].fd, &readfds); @@ -159,7 +163,7 @@ static int bsd_poll(ssh_pollfd_t *fds, nfds_t nfds, int timeout) { if (fds[i].events & (POLLPRI | POLLRDBAND)) { FD_SET (fds[i].fd, &exceptfds); } - if (fds[i].fd >= max_fd && + if (fds[i].fd > max_fd && (fds[i].events & (POLLIN | POLLOUT | POLLPRI | POLLRDNORM | POLLRDBAND | POLLWRNORM | POLLWRBAND))) { |