From 1a8dfaca372fba96615e8559d76a13b1fc1f217f Mon Sep 17 00:00:00 2001 From: FRIGN Date: Sun, 25 Jan 2015 15:24:48 +0100 Subject: [PATCH] Fix issue with negative integers passed to expand(1) WISDOM OF THE DAY: strtoul() does not error out, when it hits a '-'-sign. Instead, it happily carries on and fucks everything up. --- expand.c | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/expand.c b/expand.c index 126fe32..3862afa 100644 --- a/expand.c +++ b/expand.c @@ -6,9 +6,9 @@ #include "utf.h" #include "util.h" -static int iflag = 0; -static size_t *tablist = NULL; -static size_t tablistlen = 0; +static int iflag = 0; +static ssize_t *tablist = NULL; +static size_t tablistlen = 0; static size_t parselist(const char *s, size_t slen) @@ -29,13 +29,13 @@ parselist(const char *s, size_t slen) len++; } } - tablist = emalloc((len + 1) * sizeof(size_t)); + tablist = emalloc((len + 1) * sizeof(ssize_t)); m = 0; for (i = 0; i < slen; i += sep - (s + i) + 1) { - tablist[m++] = strtoul(s + i, &sep, 10); - if (tablist[m - 1] == 0) - eprintf("expand: tab size can't be zero.\n"); + tablist[m++] = strtol(s + i, &sep, 10); + if (tablist[m - 1] <= 0) + eprintf("expand: tab size can't be negative or zero.\n"); if (*sep && *sep != ',' && *sep != ' ') eprintf("expand: invalid number in tablist.\n"); if (m > 1 && tablist[m - 1] < tablist[m - 2])