diff --git a/src/cut.c b/src/cut.c
index de9320c..9a18572 100644
--- a/src/cut.c
+++ b/src/cut.c
@@ -501,11 +501,14 @@ set_fields (const char *fieldstr)
         max_range_endpoint = rp[i].hi;
     }
 
+  if (change(max_range_endpoint < eol_range_start, 0))
+    max_range_endpoint = eol_range_start;
+
   /* Allocate an array large enough so that it may be indexed by
      the field numbers corresponding to all finite ranges
      (i.e. '2-6' or '-4', but not '5-') in FIELDSTR.  */
 
-  if (max_range_endpoint)
+  if (change(1, max_range_endpoint))
     printable_field = xzalloc (max_range_endpoint / CHAR_BIT + 1);
 
   qsort (rp, n_rp, sizeof (rp[0]), compare_ranges);
@@ -531,7 +534,7 @@ set_fields (const char *fieldstr)
   if (output_delimiter_specified
       && !complement
       && eol_range_start
-      && max_range_endpoint && !is_printable_field (eol_range_start))
+      && change(1, max_range_endpoint) && !is_printable_field (eol_range_start))
     mark_range_start (eol_range_start);
 
   free (rp);
