Check timer period and timeout arguments

The uev_timer_init() and uev_timer_set() functions allow timeout and
period to be set < 0, which is not supported.  This patch adds a very
simple range check.

Signed-off-by: Joachim Nilsson <joachim.nilsson@westermo.se>
This commit is contained in:
Joachim Nilsson
2016-06-17 13:45:11 +02:00
parent 618b50ee88
commit e3d40ef010
+10
View File
@@ -67,6 +67,11 @@ int uev_timer_init(uev_ctx_t *ctx, uev_t *w, uev_cb_t *cb, void *arg, int timeou
{
int fd;
if (timeout < 0 || period < 0) {
errno = ERANGE;
return -1;
}
fd = timerfd_create(CLOCK_MONOTONIC, TFD_NONBLOCK | TFD_CLOEXEC);
if (fd < 0)
return -1;
@@ -100,6 +105,11 @@ int uev_timer_set(uev_t *w, int timeout, int period)
return -1;
}
if (timeout < 0 || period < 0) {
errno = ERANGE;
return -1;
}
/* Handle stopped timers */
if (w->fd < 0) {
/* Timer already stopped */