aboutsummaryrefslogtreecommitdiff
path: root/libssh
diff options
context:
space:
mode:
Diffstat (limited to 'libssh')
-rw-r--r--libssh/poll.c8
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))) {