From: J William Piggott Date: Tue, 26 Sep 2017 00:56:06 +0000 (-0400) Subject: lib/timeutils: ISO_8601_BUFSIZ too small X-Git-Tag: v2.31.1~34 X-Git-Url: http://git.ipfire.org/gitweb/gitweb.cgi?a=commitdiff_plain;h=a62e5dacff4fa8c9f634680e6989a2fde31b71db;p=thirdparty%2Futil-linux.git 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 --- diff --git a/include/timeutils.h b/include/timeutils.h index 874f853b76..edd42f7fe8 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);