From: Jim Meyering Date: Sat, 26 Jul 2003 09:12:30 +0000 (+0000) Subject: (set_fields): Detect overflow properly. X-Git-Tag: v5.0.90~63 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=421680e11c620750a294c229f028098619c8c470;p=thirdparty%2Fcoreutils.git (set_fields): Detect overflow properly. --- diff --git a/src/cut.c b/src/cut.c index f14eea890d..aad951027f 100644 --- a/src/cut.c +++ b/src/cut.c @@ -400,7 +400,7 @@ set_fields (const char *fieldstr) } else if (ISDIGIT (*fieldstr)) { - unsigned int prev; + unsigned int new_v; /* Record beginning of digit string, in case we have to complain about it. */ static char const *num_start; @@ -409,9 +409,8 @@ set_fields (const char *fieldstr) in_digits = true; /* Detect overflow. */ - prev = value; - value = 10 * value + *fieldstr - '0'; - if (value < prev) + new_v = 10 * value + *fieldstr - '0'; + if (UINT_MAX / 10 < value || new_v < value * 10) { /* In case the user specified -c4294967296-22, complain only about the first number. */ @@ -427,6 +426,8 @@ set_fields (const char *fieldstr) free (bad_num); exit (EXIT_FAILURE); } + value = new_v; + fieldstr++; } else