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.
return;
if (len <= 0)
len = strlen(str);
- if (len > virLogSize)
+ if (len >= virLogSize)
return;
virLogLock();
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
*/