From dca5b11d13330d8e5252086f470ce0a895c00de1 Mon Sep 17 00:00:00 2001 From: lurchi Date: Sun, 7 Jan 2018 16:18:32 +0100 Subject: fix dereferencing uninitialized rs/ws; assert non-NULL before dereferencing network/file handles --- src/util/scheduler.c | 17 ++++++++++++----- 1 file changed, 12 insertions(+), 5 deletions(-) (limited to 'src/util/scheduler.c') diff --git a/src/util/scheduler.c b/src/util/scheduler.c index fecbc0de5..9d37231e7 100644 --- a/src/util/scheduler.c +++ b/src/util/scheduler.c @@ -756,8 +756,9 @@ init_fd_info (struct GNUNET_SCHEDULER_Task *t, t->fds = fdi; if (1 == read_nh_len) { + GNUNET_assert (NULL != read_nh); + GNUNET_assert (NULL != *read_nh); fdi->fd = *read_nh; - GNUNET_assert (NULL != fdi->fd); fdi->et = GNUNET_SCHEDULER_ET_IN; fdi->sock = GNUNET_NETWORK_get_fd (*read_nh); t->read_fd = fdi->sock; @@ -765,8 +766,9 @@ init_fd_info (struct GNUNET_SCHEDULER_Task *t, } else if (1 == write_nh_len) { + GNUNET_assert (NULL != write_nh); + GNUNET_assert (NULL != *write_nh); fdi->fd = *write_nh; - GNUNET_assert (NULL != fdi->fd); fdi->et = GNUNET_SCHEDULER_ET_OUT; fdi->sock = GNUNET_NETWORK_get_fd (*write_nh); t->read_fd = -1; @@ -774,8 +776,9 @@ init_fd_info (struct GNUNET_SCHEDULER_Task *t, } else if (1 == read_fh_len) { + GNUNET_assert (NULL != read_fh); + GNUNET_assert (NULL != *read_fh); fdi->fh = *read_fh; - GNUNET_assert (NULL != fdi->fh); fdi->et = GNUNET_SCHEDULER_ET_IN; fdi->sock = (*read_fh)->fd; // FIXME: does not work under WIN32 t->read_fd = fdi->sock; @@ -783,8 +786,9 @@ init_fd_info (struct GNUNET_SCHEDULER_Task *t, } else { + GNUNET_assert (NULL != write_fh); + GNUNET_assert (NULL != *write_fh); fdi->fh = *write_fh; - GNUNET_assert (NULL != fdi->fh); fdi->et = GNUNET_SCHEDULER_ET_OUT; fdi->sock = (*write_fh)->fd; // FIXME: does not work under WIN32 t->read_fd = -1; @@ -1750,8 +1754,11 @@ GNUNET_SCHEDULER_add_select (enum GNUNET_SCHEDULER_Priority prio, const struct GNUNET_DISK_FileHandle **write_fhandles; unsigned int read_nhandles_len, write_nhandles_len, read_fhandles_len, write_fhandles_len; + int no_fdsets = (NULL == rs) && (NULL == ws); + int no_socket_descriptors = + ((NULL != rs) && (0 == rs->nsds)) && ((NULL != ws) && (0 == ws->nsds)); - if (((NULL == rs) && (NULL == ws)) || ((0 == rs->nsds) && (0 == ws->nsds))) + if (no_fdsets || no_socket_descriptors) return GNUNET_SCHEDULER_add_delayed_with_priority (delay, prio, task, -- cgit v1.2.3