diff options
-rw-r--r-- | jim-clock.c | 10 | ||||
-rw-r--r-- | tests/clock.test | 4 |
2 files changed, 8 insertions, 6 deletions
diff --git a/jim-clock.c b/jim-clock.c index 979b13f..e1c2d76 100644 --- a/jim-clock.c +++ b/jim-clock.c @@ -72,12 +72,11 @@ static int clock_cmd_format(Jim_Interp *interp, int argc, Jim_Obj *const *argv) time_t t; jim_wide seconds; struct clock_options options = { 0, "%a %b %d %H:%M:%S %Z %Y" }; + struct tm *tm; if (Jim_GetWide(interp, argv[0], &seconds) != JIM_OK) { return JIM_ERR; } - t = seconds; - if (argc % 2 == 0) { return -1; } @@ -85,8 +84,11 @@ static int clock_cmd_format(Jim_Interp *interp, int argc, Jim_Obj *const *argv) return JIM_ERR; } - if (strftime(buf, sizeof(buf), options.format, options.gmt ? gmtime(&t) : localtime(&t)) == 0) { - Jim_SetResultString(interp, "format string too long", -1); + t = seconds; + tm = options.gmt ? gmtime(&t) : localtime(&t); + + if (tm == NULL || strftime(buf, sizeof(buf), options.format, tm) == 0) { + Jim_SetResultString(interp, "format string too long or invalid time", -1); return JIM_ERR; } diff --git a/tests/clock.test b/tests/clock.test index 4a2deb0..288ce65 100644 --- a/tests/clock.test +++ b/tests/clock.test @@ -33,9 +33,9 @@ test clock-3.8 {clock format tests} -body { } -returnCodes error -result {wrong # args: should be "clock format seconds ?-format string? ?-gmt boolean?"} test clock-3.9 {clock format tests} { - set clockval -1 + set clockval 0 clock format $clockval -format "%a %b %d %I:%M:%S %p %Y" -gmt true -} "Wed Dec 31 11:59:59 PM 1969" +} "Thu Jan 01 12:00:00 AM 1970" test clock-3.10 {clock format tests} -body { clock format 123 -bad arg |