summaryrefslogtreecommitdiffstats
path: root/bin/ls
diff options
context:
space:
mode:
authorbapt <bapt@FreeBSD.org>2015-07-13 05:56:27 +0000
committerbapt <bapt@FreeBSD.org>2015-07-13 05:56:27 +0000
commitcd420706fe34572f88c6bf1739565b844a0ecedf (patch)
treeac06a28fdfe3028885f1f2d296b4c6187c6335b1 /bin/ls
parent20587f04e11b19d7d5ac0647a2b90efef14a1233 (diff)
downloadFreeBSD-src-cd420706fe34572f88c6bf1739565b844a0ecedf.zip
FreeBSD-src-cd420706fe34572f88c6bf1739565b844a0ecedf.tar.gz
Prevent potential integer overflow
PR: 192971 Submitted by: David Carlier <david.carlier@hardenedbsd.org>
Diffstat (limited to 'bin/ls')
-rw-r--r--bin/ls/ls.c8
1 files changed, 6 insertions, 2 deletions
diff --git a/bin/ls/ls.c b/bin/ls/ls.c
index 926d2bc..df8cc2d 100644
--- a/bin/ls/ls.c
+++ b/bin/ls/ls.c
@@ -158,6 +158,7 @@ main(int argc, char *argv[])
struct winsize win;
int ch, fts_options, notused;
char *p;
+ const char *errstr = NULL;
#ifdef COLORLS
char termcapbuf[1024]; /* termcap definition buffer */
char tcapbuf[512]; /* capability buffer */
@@ -170,7 +171,7 @@ main(int argc, char *argv[])
if (isatty(STDOUT_FILENO)) {
termwidth = 80;
if ((p = getenv("COLUMNS")) != NULL && *p != '\0')
- termwidth = atoi(p);
+ termwidth = strtonum(p, 0, INT_MAX, &errstr);
else if (ioctl(STDOUT_FILENO, TIOCGWINSZ, &win) != -1 &&
win.ws_col > 0)
termwidth = win.ws_col;
@@ -180,9 +181,12 @@ main(int argc, char *argv[])
/* retrieve environment variable, in case of explicit -C */
p = getenv("COLUMNS");
if (p)
- termwidth = atoi(p);
+ termwidth = strtonum(p, 0, INT_MAX, &errstr);
}
+ if (errstr)
+ termwidth = 80;
+
fts_options = FTS_PHYSICAL;
if (getenv("LS_SAMESORT"))
f_samesort = 1;
OpenPOWER on IntegriCloud