From: Timo Sirainen Date: Fri, 20 Feb 2026 11:20:39 +0000 (+0200) Subject: lib: timeval_add/sub_usecs() - Fix usecs type X-Git-Tag: 2.4.3~166 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=3da6d4d08990bcf4eded07156fa61335c5c8ac81;p=thirdparty%2Fdovecot%2Fcore.git lib: timeval_add/sub_usecs() - Fix usecs type Some callers expect it to be 64bit, but suseconds_t isn't guaranteed to be. Added assert mainly to catch callers that try to provide negative values as parameter, which wrap to large unsigned values. --- diff --git a/src/lib/time-util.h b/src/lib/time-util.h index 00516b11b5..6a0b30d7ba 100644 --- a/src/lib/time-util.h +++ b/src/lib/time-util.h @@ -35,9 +35,9 @@ timeval_from_usecs(struct timeval *tv_r, unsigned long usecs) } static inline void -timeval_add_usecs(struct timeval *tv, suseconds_t usecs) +timeval_add_usecs(struct timeval *tv, unsigned long long usecs) { - i_assert(usecs >= 0); + i_assert(usecs <= LLONG_MAX); tv->tv_sec += (time_t)(usecs / 1000000); tv->tv_usec += (usecs % 1000000); if (tv->tv_usec >= 1000000) { @@ -47,9 +47,9 @@ timeval_add_usecs(struct timeval *tv, suseconds_t usecs) } static inline void -timeval_sub_usecs(struct timeval *tv, suseconds_t usecs) +timeval_sub_usecs(struct timeval *tv, unsigned long long usecs) { - i_assert(usecs >= 0); + i_assert(usecs <= LLONG_MAX); tv->tv_sec -= (time_t)(usecs / 1000000); tv->tv_usec -= (usecs % 1000000); if (tv->tv_usec < 0) {