aboutsummaryrefslogtreecommitdiffstats
path: root/field.c
diff options
context:
space:
mode:
authorArnold D. Robbins <arnold@skeeve.com>2017-05-23 22:11:15 +0300
committerArnold D. Robbins <arnold@skeeve.com>2017-05-23 22:11:15 +0300
commit21f45911879abbaf5933c65df1beac8399b30038 (patch)
tree9b62a39822c3390d0e8d686811e860670ce9627d /field.c
parent6d75aa092bf1e04201c8bfa1c2ce88ca22422a00 (diff)
downloadegawk-21f45911879abbaf5933c65df1beac8399b30038.tar.gz
egawk-21f45911879abbaf5933c65df1beac8399b30038.tar.bz2
egawk-21f45911879abbaf5933c65df1beac8399b30038.zip
Additional robustness in FIELDWIDTHS parsing.
Diffstat (limited to 'field.c')
-rw-r--r--field.c36
1 files changed, 18 insertions, 18 deletions
diff --git a/field.c b/field.c
index de1bae5f..54055adc 100644
--- a/field.c
+++ b/field.c
@@ -1175,39 +1175,39 @@ set_FIELDWIDTHS()
/*
* Detect an invalid base-10 integer, a valid value that
* is followed by something other than a blank or '\0',
- * or a value that is not in the range [1..INT_MAX].
+ * or a value that is not in the range [1..UINT_MAX].
*/
errno = 0;
tmp = strtoul(scan, &end, 10);
if (errno == 0 && *end == ':' && (0 < tmp && tmp <= UINT_MAX)) {
FIELDWIDTHS->fields[i].skip = tmp;
scan = end + 1;
- if (*scan == '*')
- goto got_star;
+ if (*scan == '-') {
+ fatal_error = true;
+ break;
+ }
// try scanning for field width
tmp = strtoul(scan, &end, 10);
}
else
FIELDWIDTHS->fields[i].skip = 0;
- if (*scan == '*') {
- got_star:
- for (scan++; is_blank(*scan); scan++)
- continue;
-
- if (*scan != '\0')
- fatal(_("`*' must be the last designator in FIELDWIDTHS"));
-
- FIELDWIDTHS->fields[i].len = UINT_MAX;
- FIELDWIDTHS->nf = i+1;
- break;
- }
-
if (errno != 0
|| (*end != '\0' && ! is_blank(*end))
- || !(0 < tmp && tmp <= INT_MAX)
+ || !(0 < tmp && tmp <= UINT_MAX)
) {
- fatal_error = true;
+ if (*scan == '*') {
+ for (scan++; is_blank(*scan); scan++)
+ continue;
+
+ if (*scan != '\0')
+ fatal(_("`*' must be the last designator in FIELDWIDTHS"));
+
+ FIELDWIDTHS->fields[i].len = UINT_MAX;
+ FIELDWIDTHS->nf = i+1;
+ }
+ else
+ fatal_error = true;
break;
}
FIELDWIDTHS->fields[i].len = tmp;