diff options
author | Tobias Stoeckmann <tobias@stoeckmann.org> | 2019-04-22 19:58:56 +0200 |
---|---|---|
committer | Tobias Stoeckmann <tobias@stoeckmann.org> | 2019-04-26 18:15:50 +0200 |
commit | 4a1088baf40928673317f10614fb15da9933ad4e (patch) | |
tree | dc4065e7fd44ddf0edde6044c3620c69310b813b /evmap.c | |
parent | 04563d59d25404d10cda32c78831bdb3f6cf4c0c (diff) | |
download | libevent-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.c | 6 |
1 files changed, 5 insertions, 1 deletions
@@ -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); |