summaryrefslogtreecommitdiff
path: root/evmap.c
diff options
context:
space:
mode:
authorTobias Stoeckmann <tobias@stoeckmann.org>2019-04-22 19:58:56 +0200
committerTobias Stoeckmann <tobias@stoeckmann.org>2019-04-26 18:15:50 +0200
commit4a1088baf40928673317f10614fb15da9933ad4e (patch)
treedc4065e7fd44ddf0edde6044c3620c69310b813b /evmap.c
parent04563d59d25404d10cda32c78831bdb3f6cf4c0c (diff)
downloadlibevent-4a1088baf40928673317f10614fb15da9933ad4e.tar.gz
Enforce limit of NSIG signals.
It doesn't make sense to allow a signal number higher than NSIG. The NSIG check already exists in signal.c for internally used functions. As this is a programming error of libevent consumers, this is a purely defensive mechanism. Signed-off-by: Tobias Stoeckmann <tobias@stoeckmann.org>
Diffstat (limited to 'evmap.c')
-rw-r--r--evmap.c6
1 files changed, 5 insertions, 1 deletions
diff --git a/evmap.c b/evmap.c
index 9f46dd0f..9e3449c5 100644
--- a/evmap.c
+++ b/evmap.c
@@ -43,6 +43,7 @@
#include <unistd.h>
#endif
#include <errno.h>
+#include <limits.h>
#include <signal.h>
#include <string.h>
#include <time.h>
@@ -446,6 +447,9 @@ evmap_signal_add_(struct event_base *base, int sig, struct event *ev)
struct event_signal_map *map = &base->sigmap;
struct evmap_signal *ctx = NULL;
+ if (sig < 0 || sig >= NSIG)
+ return (-1);
+
if (sig >= map->nentries) {
if (evmap_make_space(
map, sig, sizeof(struct evmap_signal *)) == -1)
@@ -472,7 +476,7 @@ evmap_signal_del_(struct event_base *base, int sig, struct event *ev)
struct event_signal_map *map = &base->sigmap;
struct evmap_signal *ctx;
- if (sig >= map->nentries)
+ if (sig < 0 || sig >= map->nentries)
return (-1);
GET_SIGNAL_SLOT(ctx, map, sig, evmap_signal);