From 0f68b70114b683729a750d342af39d5cd7720e9b Mon Sep 17 00:00:00 2001 From: Bert Belder Date: Thu, 7 Dec 2017 22:04:17 +0100 Subject: [PATCH] api: explicitly check handle validity in epoll_wait() --- src/api.c | 21 +++++++++++++++------ 1 file changed, 15 insertions(+), 6 deletions(-) diff --git a/src/api.c b/src/api.c index 378eb6f..ffdd96b 100644 --- a/src/api.c +++ b/src/api.c @@ -121,7 +121,7 @@ int epoll_wait(HANDLE ephnd, int timeout) { reflock_tree_node_t* tree_node; ep_port_t* port_info; - int result; + int num_events; if (maxevents <= 0) return_error(-1, ERROR_INVALID_PARAMETER); @@ -131,13 +131,22 @@ int epoll_wait(HANDLE ephnd, tree_node = reflock_tree_find_and_ref(&_epoll_handle_tree, (uintptr_t) ephnd); - if (tree_node == NULL) - return_handle_error(-1, ephnd, ERROR_INVALID_PARAMETER); - port_info = _handle_tree_node_to_port(tree_node); + if (tree_node == NULL) { + err_set_win_error(ERROR_INVALID_PARAMETER); + goto err; + } - result = ep_port_wait(port_info, events, maxevents, timeout); + port_info = _handle_tree_node_to_port(tree_node); + num_events = ep_port_wait(port_info, events, maxevents, timeout); reflock_tree_node_unref(tree_node); - return result; + if (num_events < 0) + goto err; + + return num_events; + +err: + err_check_handle(ephnd); + return -1; }