From dfc94e0221c0b830e49800e25e15c4ccad281b2c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mattias=20Andr=C3=A9e?= Date: Sun, 27 Mar 2016 14:49:45 +0200 Subject: [PATCH] ls: fix segfault when timestamp is out of range for struct tm MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Mattias Andrée --- ls.c | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/ls.c b/ls.c index 3268a99..8cc285b 100644 --- a/ls.c +++ b/ls.c @@ -118,6 +118,7 @@ output(const struct entry *ent) { struct group *gr; struct passwd *pw; + struct tm *tm; ssize_t len; size_t l; char *name, *c, *u, *fmt, buf[BUFSIZ], @@ -194,7 +195,10 @@ output(const struct entry *ent) else fmt = "%b %d %H:%M"; - strftime(buf, sizeof(buf), fmt, localtime(&ent->t.tv_sec)); + if ((tm = localtime(&ent->t.tv_sec))) + strftime(buf, sizeof(buf), fmt, tm); + else + snprintf(buf, sizeof(buf), "%lld", (long long)(ent->t.tv_sec)); printf("%s %4ld %-8.8s %-8.8s ", mode, (long)ent->nlink, pwname, grname); if (S_ISBLK(ent->mode) || S_ISCHR(ent->mode))