logging: fix off-by-one bug

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.
This commit is contained in:
Eric Blake 2011-03-18 20:19:31 -06:00
parent 3c2b210a3c
commit dd5564f218

View 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
*/