X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?a=blobdiff_plain;f=src%2Fbasic%2Ftime-util.c;h=a2b57f872716a37ecdb6de7adbbaf5f998c431cb;hb=9b00a533195b7fec54a791ca02090e0799214770;hp=1fcbbaa478aed679e808b81c4e256aa735103ebf;hpb=f5ec357713381a95b30fa4f3d18aa092a632cfa9;p=elogind.git diff --git a/src/basic/time-util.c b/src/basic/time-util.c index 1fcbbaa47..a2b57f872 100644 --- a/src/basic/time-util.c +++ b/src/basic/time-util.c @@ -218,7 +218,7 @@ struct timespec *timespec_store(struct timespec *ts, usec_t u) { assert(ts); if (u == USEC_INFINITY || - u / USEC_INFINITY >= TIME_T_MAX) { + u / USEC_PER_SEC >= TIME_T_MAX) { ts->tv_sec = (time_t) -1; ts->tv_nsec = (long) -1; return ts; @@ -565,12 +565,12 @@ void dual_timestamp_serialize(FILE *f, const char *name, dual_timestamp *t) { } int dual_timestamp_deserialize(const char *value, dual_timestamp *t) { - unsigned long long a, b; + uint64_t a, b; assert(value); assert(t); - if (sscanf(value, "%llu %llu", &a, &b) != 2) { + if (sscanf(value, "%" PRIu64 "%" PRIu64, &a, &b) != 2) { log_debug("Failed to parse dual timestamp value \"%s\": %m", value); return -EINVAL; } @@ -857,6 +857,8 @@ from_tm: return -EINVAL; finish: + if (ret + plus < ret) /* overflow? */ + return -EINVAL; ret += plus; if (ret > USEC_TIMESTAMP_FORMATTABLE_MAX) return -EINVAL;