]> xenbits.xensource.com Git - libvirt.git/commitdiff
logging: fix off-by-one bug
authorEric Blake <eblake@redhat.com>
Sat, 19 Mar 2011 02:19:31 +0000 (20:19 -0600)
committerEric Blake <eblake@redhat.com>
Mon, 21 Mar 2011 15:35:01 +0000 (09:35 -0600)
Valgrind caught that our log wrap-around was going 1 past the end.
Regression introduced in commit b16f47a; previously the
buffer was static and size+1 bytes, but now it is dynamic and
exactly size bytes.

* src/util/logging.c (virLogStr): Don't write past end of log.

src/util/logging.c

index b972f8a796db22425dfba3d87c43398ca444f825..f4910ad945fbfe2216b45139b33cae2f7099f68b 100644 (file)
@@ -326,7 +326,7 @@ static void virLogStr(const char *str, int len) {
         return;
     if (len <= 0)
         len = strlen(str);
-    if (len > virLogSize)
+    if (len >= virLogSize)
         return;
     virLogLock();
 
@@ -336,13 +336,13 @@ static void virLogStr(const char *str, int len) {
     if (virLogEnd + len >= virLogSize) {
         tmp = virLogSize - virLogEnd;
         memcpy(&virLogBuffer[virLogEnd], str, tmp);
-        virLogBuffer[virLogSize] = 0;
         memcpy(&virLogBuffer[0], &str[tmp], len - tmp);
         virLogEnd = len - tmp;
     } else {
         memcpy(&virLogBuffer[virLogEnd], str, len);
         virLogEnd += len;
     }
+    virLogBuffer[virLogEnd] = 0;
     /*
      * Update the log length, and if full move the start index
      */