From 831da41cbc76ecc67cdb0ca24c0f3b0f33181848 Mon Sep 17 00:00:00 2001 From: Jim Meyering Date: Tue, 17 Jun 2014 08:29:46 -0700 Subject: [PATCH] parse-duration: eliminate 68-year duration limit * lib/parse-duration.c: Include "intprops.h". (TIME_MAX): Rename to MAX_DURATION and define to TYPE_MAXIMUM(time_t). * modules/parse-duration (Depends-on): Add intprops. Reported by Jonas 'Sortie' Termansen. --- ChangeLog | 10 ++++++++++ lib/parse-duration.c | 9 ++++++--- modules/parse-duration | 1 + 3 files changed, 17 insertions(+), 3 deletions(-) diff --git a/ChangeLog b/ChangeLog index 6fff9d785d..5dd0d6f64c 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,13 @@ +2014-06-11 Bruce Korb + Jim Meyering + + parse-duration: eliminate 68-year duration limit + * lib/parse-duration.c: Include "intprops.h". + (TIME_MAX): Rename to MAX_DURATION and define to + TYPE_MAXIMUM(time_t). + * modules/parse-duration (Depends-on): Add intprops. + Reported by Jonas 'Sortie' Termansen. + 2014-06-14 Paul Eggert pthread: don't assume AC_CANONICAL_HOST, port better to Solaris, etc. diff --git a/lib/parse-duration.c b/lib/parse-duration.c index 037e81e412..82a11938ee 100644 --- a/lib/parse-duration.c +++ b/lib/parse-duration.c @@ -27,6 +27,8 @@ #include #include +#include "intprops.h" + #ifndef NUL #define NUL '\0' #endif @@ -51,7 +53,8 @@ typedef enum { #define SEC_PER_MONTH (SEC_PER_DAY * 30) #define SEC_PER_YEAR (SEC_PER_DAY * 365) -#define TIME_MAX 0x7FFFFFFF +#undef MAX_DURATION +#define MAX_DURATION TYPE_MAXIMUM(time_t) /* Wrapper around strtoul that does not require a cast. */ static unsigned long @@ -80,14 +83,14 @@ scale_n_add (time_t base, time_t val, int scale) return BAD_TIME; } - if (val > TIME_MAX / scale) + if (val > MAX_DURATION / scale) { errno = ERANGE; return BAD_TIME; } val *= scale; - if (base > TIME_MAX - val) + if (base > MAX_DURATION - val) { errno = ERANGE; return BAD_TIME; diff --git a/modules/parse-duration b/modules/parse-duration index 46288c0e13..6184dc4315 100644 --- a/modules/parse-duration +++ b/modules/parse-duration @@ -6,6 +6,7 @@ lib/parse-duration.h lib/parse-duration.c Depends-on: +intprops configure.ac: -- 2.39.5