diff --git a/timer.c b/timer.c index 8de9bf2..2a06466 100644 --- a/timer.c +++ b/timer.c @@ -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 */