* output.c: Ensure space for final nul byte in fmtbuf.
authorRay Donnelly <mingw.android@gmail.com>
Sun, 2 Feb 2014 15:51:05 +0000 (10:51 -0500)
committerPaul Smith <psmith@gnu.org>
Sat, 8 Feb 2014 21:01:10 +0000 (16:01 -0500)
Copyright-paperwork-exempt: yes

output.c

index 000e241440af5c0392a52d1af56ad7ce3cd4ce7b..b2584f11d77b36cbc5c8ea0ae3e9114edc8bb8aa 100644 (file)
--- a/output.c
+++ b/output.c
@@ -591,14 +591,14 @@ static struct fmtstring
 static char *
 get_buffer (size_t need)
 {
-  /* Make sure we have room.  */
+  /* Make sure we have room.  NEED includes space for \0.  */
   if (need > fmtbuf.size)
     {
       fmtbuf.size += need * 2;
       fmtbuf.buffer = xrealloc (fmtbuf.buffer, fmtbuf.size);
     }
 
-  fmtbuf.buffer[need] = '\0';
+  fmtbuf.buffer[need-1] = '\0';
 
   return fmtbuf.buffer;
 }
@@ -629,7 +629,7 @@ message (int prefix, size_t len, const char *fmt, ...)
 
   strcat (p, "\n");
 
-  assert (fmtbuf.buffer[len] == '\0');
+  assert (fmtbuf.buffer[len-1] == '\0');
   outputs (0, fmtbuf.buffer);
 }
 
@@ -660,7 +660,7 @@ error (const gmk_floc *flocp, size_t len, const char *fmt, ...)
 
   strcat (p, "\n");
 
-  assert (fmtbuf.buffer[len] == '\0');
+  assert (fmtbuf.buffer[len-1] == '\0');
   outputs (1, fmtbuf.buffer);
 }
 
@@ -692,7 +692,7 @@ fatal (const gmk_floc *flocp, size_t len, const char *fmt, ...)
 
   strcat (p, stop);
 
-  assert (fmtbuf.buffer[len] == '\0');
+  assert (fmtbuf.buffer[len-1] == '\0');
   outputs (1, fmtbuf.buffer);
 
   die (2);