From fd09c93de9337c3df566180d04368353bb3662e7 Mon Sep 17 00:00:00 2001 From: Michal Schmidt Date: Mon, 29 Oct 2012 21:04:47 +0100 Subject: [PATCH] util: improve overflow checks commit 49371bb fixed the observed division by zero, but missed another occurrence of the same bug. It was also not the optimal fix. We can simply make the divisor a constant by swapping it with the compared value. --- src/shared/util.c | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/src/shared/util.c b/src/shared/util.c index 9a45e6058..8ec83e49a 100644 --- a/src/shared/util.c +++ b/src/shared/util.c @@ -148,8 +148,7 @@ usec_t timespec_load(const struct timespec *ts) { ts->tv_nsec == (long) -1) return (usec_t) -1; - if (ts->tv_sec > 0 && - USEC_PER_SEC > ((UINT64_MAX - (ts->tv_nsec / NSEC_PER_USEC)) / (usec_t) ts->tv_sec)) + if ((usec_t) ts->tv_sec > (UINT64_MAX - (ts->tv_nsec / NSEC_PER_USEC)) / USEC_PER_SEC) return (usec_t) -1; return @@ -179,7 +178,7 @@ usec_t timeval_load(const struct timeval *tv) { tv->tv_usec == (suseconds_t) -1) return (usec_t) -1; - if (USEC_PER_SEC > (UINT64_MAX - tv->tv_usec) / (usec_t) tv->tv_sec) + if ((usec_t) tv->tv_sec > (UINT64_MAX - tv->tv_usec) / USEC_PER_SEC) return (usec_t) -1; return -- 2.30.2