virTestCompareToFile: Don't access memory we don't own

After reading the contents of a file some cleanup is performed.
However, the check for it might access a byte outside of the
string - if the file is empty in the first place. Then strlen()
is zero.

Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
This commit is contained in:
Michal Privoznik 2017-08-04 15:22:53 +02:00
parent e0a4eaa913
commit 3506f1ecfd

View File

@ -795,13 +795,17 @@ virTestCompareToFile(const char *strcontent,
if (virTestLoadFile(filename, &filecontent) < 0 && !virTestGetRegenerate())
goto failure;
if (filecontent &&
filecontent[strlen(filecontent) - 1] == '\n' &&
if (filecontent) {
size_t filecontentLen = strlen(filecontent);
if (filecontentLen > 0 &&
filecontent[filecontentLen - 1] == '\n' &&
strcontent[strlen(strcontent) - 1] != '\n') {
if (virAsprintf(&fixedcontent, "%s\n", strcontent) < 0)
goto failure;
cmpcontent = fixedcontent;
}
}
if (STRNEQ_NULLABLE(cmpcontent, filecontent)) {
virTestDifferenceFull(stderr,