git: 3c67983babbb - stable/13 - Handle NULL return from localtime(3) in ls(1) and find(1)
- Go to: [ bottom of page ] [ top of archives ] [ this month ]
Date: Tue, 27 Sep 2022 16:20:49 UTC
The branch stable/13 has been updated by mckusick: URL: https://cgit.FreeBSD.org/src/commit/?id=3c67983babbb2c51e29424165f87adc8c4bf7dda commit 3c67983babbb2c51e29424165f87adc8c4bf7dda Author: Kirk McKusick <mckusick@FreeBSD.org> AuthorDate: 2022-09-09 21:29:53 +0000 Commit: Kirk McKusick <mckusick@FreeBSD.org> CommitDate: 2022-09-27 16:20:29 +0000 Handle NULL return from localtime(3) in ls(1) and find(1) (cherry picked from commit 927f8d8bbbed70f6c88d05c19b5b366f8e7532c9) --- bin/ls/print.c | 11 ++++++----- usr.bin/find/ls.c | 6 +++++- 2 files changed, 11 insertions(+), 6 deletions(-) diff --git a/bin/ls/print.c b/bin/ls/print.c index bbe5c6f8a6f6..5e8a54ca0620 100644 --- a/bin/ls/print.c +++ b/bin/ls/print.c @@ -432,18 +432,17 @@ printdev(size_t width, dev_t dev) (void)printf("%#*jx ", (u_int)width, (uintmax_t)dev); } -static size_t +static void ls_strftime(char *str, size_t len, const char *fmt, const struct tm *tm) { char *posb, nfmt[BUFSIZ]; const char *format = fmt; - size_t ret; if ((posb = strstr(fmt, "%b")) != NULL) { if (month_max_size == 0) { compute_abbreviated_month_size(); } - if (month_max_size > 0) { + if (month_max_size > 0 && tm != NULL) { snprintf(nfmt, sizeof(nfmt), "%.*s%s%*s%s", (int)(posb - fmt), fmt, get_abmon(tm->tm_mon), @@ -453,8 +452,10 @@ ls_strftime(char *str, size_t len, const char *fmt, const struct tm *tm) format = nfmt; } } - ret = strftime(str, len, format, tm); - return (ret); + if (tm != NULL) + strftime(str, len, format, tm); + else + strlcpy(str, "bad date val", len); } static void diff --git a/usr.bin/find/ls.c b/usr.bin/find/ls.c index 8c4c16ed3461..8d7406216256 100644 --- a/usr.bin/find/ls.c +++ b/usr.bin/find/ls.c @@ -88,6 +88,7 @@ printtime(time_t ftime) static time_t lnow; const char *format; static int d_first = -1; + struct tm *tm; #ifdef D_MD_ORDER if (d_first < 0) @@ -103,7 +104,10 @@ printtime(time_t ftime) else /* mmm dd yyyy || dd mmm yyyy */ format = d_first ? "%e %b %Y " : "%b %e %Y "; - strftime(longstring, sizeof(longstring), format, localtime(&ftime)); + if ((tm = localtime(&ftime)) != NULL) + strftime(longstring, sizeof(longstring), format, tm); + else + strlcpy(longstring, "bad date val ", sizeof(longstring)); fputs(longstring, stdout); }