]> git.ipfire.org Git - thirdparty/coreutils.git/commitdiff
(set_fields): Detect overflow properly.
authorJim Meyering <jim@meyering.net>
Sat, 26 Jul 2003 09:12:30 +0000 (09:12 +0000)
committerJim Meyering <jim@meyering.net>
Sat, 26 Jul 2003 09:12:30 +0000 (09:12 +0000)
src/cut.c

index f14eea890d539ec2061c9c6c938533e781f15751..aad951027f887b9548400f510e417a195f33b6a5 100644 (file)
--- 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