diff options
author | J William Piggott | 2017-09-26 02:56:06 +0200 |
---|---|---|
committer | J William Piggott | 2017-11-10 21:49:45 +0100 |
commit | 8c5a21f2187f78e9aab02f5f11dbbd226a4d795d (patch) | |
tree | 9d6ba8c0ff02fd91bcc64dab18ec4138f76da7ac | |
parent | hwclock: add iso-8601 overflow check (diff) | |
download | kernel-qcow2-util-linux-8c5a21f2187f78e9aab02f5f11dbbd226a4d795d.tar.gz kernel-qcow2-util-linux-8c5a21f2187f78e9aab02f5f11dbbd226a4d795d.tar.xz kernel-qcow2-util-linux-8c5a21f2187f78e9aab02f5f11dbbd226a4d795d.zip |
lib/timeutils: ISO_8601_BUFSIZ too small
Although iso-8601 specifies years as 4 digits, it allows
them to be wider.
The current POSIX year width is limited by 'int tm_year'
at 10 digits plus a negative sign.
That, and the possibility of nanosecond time makes the
widest POSIX iso-8601 time 41 characters. Plus the \0
string terminator yields a buffer size of 42.
Before truncated output:
/sbin/hwclock --utc --noadjfile --predict --date '-2147483765 years'
-2147481748-09-25 20:29:45.0000
Patched:
./hwclock --utc --noadjfile --predict --date '-2147483765 years'
-2147481748-09-25 20:17:21.000000-0456
./hwclock --utc --noadjfile --predict --date '-2147483766 years'
hwclock: invalid date '-2147483766 years'
Comparable to coreutils 'date' command:
date -Ins --date '-2147483765 years'
-2147481748-09-25T19:49:31,578899297-0456
date -Ins --date '-2147483766 years'
date: invalid date '-2147483766 years'
The 'date' output illustrates the full 41 character POSIX iso-8601
Signed-off-by: J William Piggott <elseifthen@gmx.com>
-rw-r--r-- | include/timeutils.h | 2 |
1 files changed, 1 insertions, 1 deletions
diff --git a/include/timeutils.h b/include/timeutils.h index 874f853b7..edd42f7fe 100644 --- a/include/timeutils.h +++ b/include/timeutils.h @@ -65,7 +65,7 @@ enum { ISO_8601_GMTIME = (1 << 7) }; -#define ISO_8601_BUFSIZ 32 +#define ISO_8601_BUFSIZ 42 int strtimeval_iso(struct timeval *tv, int flags, char *buf, size_t bufsz); int strtm_iso(struct tm *tm, int flags, char *buf, size_t bufsz); |