summaryrefslogtreecommitdiff
path: root/sftp-common.c
diff options
context:
space:
mode:
authorDamien Miller <djm@mindrot.org>2014-01-10 10:40:45 +1100
committerDamien Miller <djm@mindrot.org>2014-01-10 10:40:45 +1100
commite00e413dd16eb747fb2c15a099971d91c13cf70f (patch)
treea1c10658e14c9b48e5633d4894a07136cd232e54 /sftp-common.c
parent3e49853650448883685cfa32fa382d0ba6d51d48 (diff)
- guenther@cvs.openbsd.org 2014/01/09 03:26:00
[sftp-common.c] When formating the time for "ls -l"-style output, show dates in the future with the year, and rearrange a comparison to avoid a potentional signed arithmetic overflow that would give the wrong result. ok djm@
Diffstat (limited to 'sftp-common.c')
-rw-r--r--sftp-common.c7
1 files changed, 5 insertions, 2 deletions
diff --git a/sftp-common.c b/sftp-common.c
index 88bf51bc6..70a929ccc 100644
--- a/sftp-common.c
+++ b/sftp-common.c
@@ -1,4 +1,4 @@
1/* $OpenBSD: sftp-common.c,v 1.25 2013/11/08 11:15:19 dtucker Exp $ */ 1/* $OpenBSD: sftp-common.c,v 1.26 2014/01/09 03:26:00 guenther Exp $ */
2/* 2/*
3 * Copyright (c) 2001 Markus Friedl. All rights reserved. 3 * Copyright (c) 2001 Markus Friedl. All rights reserved.
4 * Copyright (c) 2001 Damien Miller. All rights reserved. 4 * Copyright (c) 2001 Damien Miller. All rights reserved.
@@ -195,6 +195,7 @@ ls_file(const char *name, const struct stat *st, int remote, int si_units)
195 char *user, *group; 195 char *user, *group;
196 char buf[1024], mode[11+1], tbuf[12+1], ubuf[11+1], gbuf[11+1]; 196 char buf[1024], mode[11+1], tbuf[12+1], ubuf[11+1], gbuf[11+1];
197 char sbuf[FMT_SCALED_STRSIZE]; 197 char sbuf[FMT_SCALED_STRSIZE];
198 time_t now;
198 199
199 strmode(st->st_mode, mode); 200 strmode(st->st_mode, mode);
200 if (!remote) { 201 if (!remote) {
@@ -210,7 +211,9 @@ ls_file(const char *name, const struct stat *st, int remote, int si_units)
210 group = gbuf; 211 group = gbuf;
211 } 212 }
212 if (ltime != NULL) { 213 if (ltime != NULL) {
213 if (time(NULL) - st->st_mtime < (365*24*60*60)/2) 214 now = time(NULL);
215 if (now - (365*24*60*60)/2 < st->st_mtime &&
216 now >= st->st_mtime)
214 sz = strftime(tbuf, sizeof tbuf, "%b %e %H:%M", ltime); 217 sz = strftime(tbuf, sizeof tbuf, "%b %e %H:%M", ltime);
215 else 218 else
216 sz = strftime(tbuf, sizeof tbuf, "%b %e %Y", ltime); 219 sz = strftime(tbuf, sizeof tbuf, "%b %e %Y", ltime);