Paranoia (and gcc warning suppression): Avoid arithmetic overflow.
authorTaylor R Campbell <campbell@mumble.net>
Thu, 8 Nov 2018 17:25:14 +0000 (17:25 +0000)
committerTaylor R Campbell <campbell@mumble.net>
Thu, 8 Nov 2018 17:25:14 +0000 (17:25 +0000)
src/microcode/findprim.c

index f526d261c60bf65768cce2eddc960a0a09100542..f6a117725cf0e54c4ce485195ea69656033b8b79 100644 (file)
@@ -633,6 +633,11 @@ initialize_token_buffer (void)
 void
 grow_token_buffer (void)
 {
+  if (token_buffer_length >= (SIZE_MAX / 2))
+    {
+      fprintf (stderr, "token buffer overflow\n");
+      exit (1);
+    }
   token_buffer_length *= 2;
   token_buffer = (xrealloc (token_buffer, token_buffer_length));
   return;
@@ -812,6 +817,11 @@ void
 grow_data_buffer (void)
 {
   char * old_data_buffer = ((char *) data_buffer);
+  if (buffer_length >= (SIZE_MAX / (2 * (sizeof (struct descriptor)))))
+    {
+      fprintf (stderr, "data buffer overflow\n");
+      exit (1);
+    }
   buffer_length *= 2;
   data_buffer =
     ((struct descriptor (*) [])
@@ -827,6 +837,11 @@ grow_data_buffer (void)
        scan += 1;
       }
   }
+  if (buffer_length >= (SIZE_MAX / (sizeof (struct descriptor *))))
+    {
+      fprintf (stderr, "result buffer overflow\n");
+      exit (1);
+    }
   result_buffer =
     ((struct descriptor **)
      (xrealloc (((char *) result_buffer),