]> git.ipfire.org Git - thirdparty/util-linux.git/commitdiff
column.c: validate numeric user inputs
authorSami Kerola <kerolasa@iki.fi>
Sun, 1 May 2011 17:24:47 +0000 (19:24 +0200)
committerSami Kerola <kerolasa@iki.fi>
Thu, 19 May 2011 19:09:24 +0000 (21:09 +0200)
Use strtol_or_err from strutils.h to check numeric user input is
sane.

Signed-off-by: Sami Kerola <kerolasa@iki.fi>
text-utils/Makefile.am
text-utils/column.c

index 513f1c36739607c66988c26c8ca0965dd3f02e83..cc4b8b66d33828609bfe75e1d63c0f269489bcba 100644 (file)
@@ -4,6 +4,8 @@ EXTRA_DIST = README.clear README.col
 
 usrbin_exec_PROGRAMS = col colcrt colrm column hexdump rev line tailf
 
+column_SOURCES = column.c $(top_srcdir)/lib/strutils.c
+
 hexdump_SOURCES = hexdump.c conv.c display.c hexsyntax.c parse.c \
                  hexdump.h $(top_srcdir)/lib/strutils.c
 
index 6b797d3409ac665b8e2e33c3c582d33609026cca..7604dc905715c990a564de62f7df1bf748a70c69 100644 (file)
@@ -54,6 +54,7 @@
 #include "widechar.h"
 #include "c.h"
 #include "xalloc.h"
+#include "strutils.h"
 
 #ifdef HAVE_WIDECHAR
 #define wcs_width(s) wcswidth(s,wcslen(s))
@@ -81,7 +82,7 @@ typedef struct _tbl {
        int cols, *len;
 } TBL;
 
-int termwidth = 80;            /* default terminal width */
+long termwidth;
 
 int entries;                   /* number of records */
 int eval;                      /* exit value */
@@ -134,7 +135,8 @@ int main(int argc, char **argv)
 
        if (ioctl(STDIN_FILENO, TIOCGWINSZ, &win) == -1 || !win.ws_col) {
                if ((p = getenv("COLUMNS")) != NULL)
-                       termwidth = atoi(p);
+                       termwidth = strtol_or_err(p,
+                                       _("terminal environment COLUMNS failed"));
        } else
                termwidth = win.ws_col;
 
@@ -149,7 +151,11 @@ int main(int argc, char **argv)
                                 PACKAGE_STRING);
                                 return(EXIT_SUCCESS);
                case 'c':
-                       termwidth = atoi(optarg);
+                       termwidth = strtol_or_err(optarg,
+                                                 _("bad columns width value"));
+                       if (termwidth < 1)
+                               errx(EXIT_FAILURE,
+                                    _("-%c positive integer expected as an argument"), ch);
                        break;
                case 's':
                        separator = mbs_to_wcs(optarg);