1
0
Fork 0
mirror of https://github.com/ruby/ruby.git synced 2022-11-09 12:17:21 -05:00

Don't allow fd == -1 to propagate to system calls.

This commit is contained in:
Samuel Williams 2021-11-11 01:20:46 +13:00
parent d5dd87d0db
commit 51c67ee61a
Notes: git 2021-11-11 09:35:37 +09:00

14
io.c
View file

@ -11270,9 +11270,12 @@ nogvl_wait_for(VALUE th, rb_io_t *fptr, short events)
return RTEST(args.result);
}
int fd = fptr->fd;
if (fd == -1) return 0;
struct pollfd fds;
fds.fd = fptr->fd;
fds.fd = fd;
fds.events = events;
return poll(&fds, 1, -1);
@ -11289,18 +11292,21 @@ nogvl_wait_for(VALUE th, rb_io_t *fptr, short events)
return RTEST(args.result);
}
int fd = fptr->fd;
if (fd == -1) return 0;
rb_fdset_t fds;
int ret;
rb_fd_init(&fds);
rb_fd_set(fptr->fd, &fds);
rb_fd_set(fd, &fds);
switch (events) {
case RB_WAITFD_IN:
ret = rb_fd_select(fptr->fd + 1, &fds, 0, 0, 0);
ret = rb_fd_select(fd + 1, &fds, 0, 0, 0);
break;
case RB_WAITFD_OUT:
ret = rb_fd_select(fptr->fd + 1, 0, &fds, 0, 0);
ret = rb_fd_select(fd + 1, 0, &fds, 0, 0);
break;
default:
VM_UNREACHABLE(nogvl_wait_for);