From f64cd71d442b0b7152131282dd7567be010edb78 Mon Sep 17 00:00:00 2001 From: dana Date: Mon, 24 Dec 2018 02:42:18 -0600 Subject: 43935: Reject too-large nanosecond values given to strftime ... and, in so doing, fix an error in the tests on 32-bit machines. The value for the new too-large test is changed slightly from the patch posted to the ML to make it test for the right thing on 32-bit machines as well. --- ChangeLog | 8 +++++++- Src/Modules/datetime.c | 2 +- Test/V09datetime.ztst | 5 ++++- 3 files changed, 12 insertions(+), 3 deletions(-) diff --git a/ChangeLog b/ChangeLog index ac8524bd0..8f92c8e34 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,4 +1,10 @@ -2018-12-17 dana +2018-12-24 dana + + * 43935 (tweaked): Src/Modules/datetime.c, Test/V09datetime.ztst: + Fix test error on 32-bit machines, reject too-large nanosecond + values given to strftime + +2018-12-23 dana * 43928: Completion/Base/Utility/_alternative: Evaluate (...) action syntax as with _arguments diff --git a/Src/Modules/datetime.c b/Src/Modules/datetime.c index 18c7fb58e..521c15a5b 100644 --- a/Src/Modules/datetime.c +++ b/Src/Modules/datetime.c @@ -148,7 +148,7 @@ output_strftime(char *nam, char **argv, Options ops, UNUSED(int func)) } else if (*argv[2] == '\0' || *endptr != '\0') { zwarnnam(nam, "%s: invalid decimal number", argv[2]); return 1; - } else if (ts.tv_nsec < 0) { + } else if (ts.tv_nsec < 0 || ts.tv_nsec > 999999999) { zwarnnam(nam, "%s: invalid nanosecond value", argv[2]); return 1; } diff --git a/Test/V09datetime.ztst b/Test/V09datetime.ztst index 22d560750..2041d9b40 100644 --- a/Test/V09datetime.ztst +++ b/Test/V09datetime.ztst @@ -90,7 +90,7 @@ strftime '%Y-%m-%d %H:%M:%S.%3.' 1012615322 strftime '%Y-%m-%d %H:%M:%S.%3.' 1012615322 0 strftime '%Y-%m-%d %H:%M:%S.%3.' 1012615322 2 - strftime '%Y-%m-%d %H:%M:%S.%3.' 1012615322 $(( 222 * (10 ** 9) )) + strftime '%Y-%m-%d %H:%M:%S.%3.' 1012615322 $(( 222 * (10 ** 6) )) 0:optional nanoseconds >2002-02-02 02:02:02.000 >2002-02-02 02:02:02.000 @@ -103,6 +103,9 @@ strftime '%Y' 1012615322 '' 2> /dev/null 1:empty nanoseconds not allowed + strftime '%N' 1012615322 $(( 10 ** 9 )) 2> /dev/null +1:too-large nanoseconds not allowed + strftime '%N' 1012615322 ${(l<64><9>):-} 2> /dev/null 1:overflowed nanoseconds not allowed -- cgit 1.4.1