From f5ec357713381a95b30fa4f3d18aa092a632cfa9 Mon Sep 17 00:00:00 2001 From: Lennart Poettering Date: Thu, 2 Feb 2017 18:33:36 +0100 Subject: [PATCH] time-util: when converting to time_t do something useful in 2038 On systems where time_t is 32bit we should invalidate the timeval/timespec instead of proceeding with a potentially overflown value. --- src/basic/time-util.c | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/basic/time-util.c b/src/basic/time-util.c index b8f56544d..1fcbbaa47 100644 --- a/src/basic/time-util.c +++ b/src/basic/time-util.c @@ -217,7 +217,8 @@ nsec_t timespec_load_nsec(const struct timespec *ts) { struct timespec *timespec_store(struct timespec *ts, usec_t u) { assert(ts); - if (u == USEC_INFINITY) { + if (u == USEC_INFINITY || + u / USEC_INFINITY >= TIME_T_MAX) { ts->tv_sec = (time_t) -1; ts->tv_nsec = (long) -1; return ts; @@ -246,7 +247,8 @@ usec_t timeval_load(const struct timeval *tv) { struct timeval *timeval_store(struct timeval *tv, usec_t u) { assert(tv); - if (u == USEC_INFINITY) { + if (u == USEC_INFINITY|| + u / USEC_PER_SEC > TIME_T_MAX) { tv->tv_sec = (time_t) -1; tv->tv_usec = (suseconds_t) -1; } else { -- 2.30.2