The branch stable/13 has been updated by mckusick:

URL: 
https://cgit.FreeBSD.org/src/commit/?id=3c67983babbb2c51e29424165f87adc8c4bf7dda

commit 3c67983babbb2c51e29424165f87adc8c4bf7dda
Author:     Kirk McKusick <[email protected]>
AuthorDate: 2022-09-09 21:29:53 +0000
Commit:     Kirk McKusick <[email protected]>
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);
 }
 

Reply via email to