[hackers] [sbase][PATCH v2.2] ls: fix segfault when timestamp is out of range for struct tm

From: Mattias Andrée <maandree_AT_kth.se>
Date: Sun, 27 Mar 2016 19:56:11 +0200

Signed-off-by: Mattias Andrée <maandree_AT_kth.se>
---
 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
_AT_@ -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],
_AT_@ -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))
-- 
2.7.4
Received on Sun Mar 27 2016 - 19:56:11 CEST

This archive was generated by hypermail 2.3.0 : Sun Mar 27 2016 - 20:00:22 CEST