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.
This commit is contained in:
FRIGN 2015-01-25 15:24:48 +01:00
parent 5f448d9a8b
commit 1a8dfaca37
1 changed files with 7 additions and 7 deletions

View File

@ -6,9 +6,9 @@
#include "utf.h" #include "utf.h"
#include "util.h" #include "util.h"
static int iflag = 0; static int iflag = 0;
static size_t *tablist = NULL; static ssize_t *tablist = NULL;
static size_t tablistlen = 0; static size_t tablistlen = 0;
static size_t static size_t
parselist(const char *s, size_t slen) parselist(const char *s, size_t slen)
@ -29,13 +29,13 @@ parselist(const char *s, size_t slen)
len++; len++;
} }
} }
tablist = emalloc((len + 1) * sizeof(size_t)); tablist = emalloc((len + 1) * sizeof(ssize_t));
m = 0; m = 0;
for (i = 0; i < slen; i += sep - (s + i) + 1) { for (i = 0; i < slen; i += sep - (s + i) + 1) {
tablist[m++] = strtoul(s + i, &sep, 10); tablist[m++] = strtol(s + i, &sep, 10);
if (tablist[m - 1] == 0) if (tablist[m - 1] <= 0)
eprintf("expand: tab size can't be zero.\n"); eprintf("expand: tab size can't be negative or zero.\n");
if (*sep && *sep != ',' && *sep != ' ') if (*sep && *sep != ',' && *sep != ' ')
eprintf("expand: invalid number in tablist.\n"); eprintf("expand: invalid number in tablist.\n");
if (m > 1 && tablist[m - 1] < tablist[m - 2]) if (m > 1 && tablist[m - 1] < tablist[m - 2])