mirror of
https://gitlab.com/libvirt/libvirt.git
synced 2024-12-24 14:45:24 +00:00
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:
parent
3c2b210a3c
commit
dd5564f218
@ -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
|
||||
*/
|
||||
|
Loading…
Reference in New Issue
Block a user