The virFileAbsPath was not taking into account the '/' directory separator when allocating memory for combining cwd + path. Convert to use virAsprintf to avoid this type of bug completely. * src/util/util.c: Convert virFileAbsPath to use virAsprintf --- src/util/util.c | 19 ++++++------------- 1 files changed, 6 insertions(+), 13 deletions(-) diff --git a/src/util/util.c b/src/util/util.c index 965e96d..452f592 100644 --- a/src/util/util.c +++ b/src/util/util.c @@ -1990,30 +1990,23 @@ cleanup: int virFileAbsPath(const char *path, char **abspath) { char *buf; - int cwdlen; if (path[0] == '/') { - buf = strdup(path); - if (buf == NULL) - return(-1); + if (!(*abspath = strdup(path))) + return -1; } else { buf = getcwd(NULL, 0); if (buf == NULL) - return(-1); + return -1; - cwdlen = strlen(buf); - /* cwdlen includes the null terminator */ - if (VIR_REALLOC_N(buf, cwdlen + strlen(path) + 1) < 0) { + if (virAsprintf(abspath, "%s/%s", buf, path) < 0) { VIR_FREE(buf); errno = ENOMEM; - return(-1); + return -1; } - - buf[cwdlen] = '/'; - strcpy(&buf[cwdlen + 1], path); + VIR_FREE(buf); } - *abspath = buf; return 0; } -- 1.7.4 -- libvir-list mailing list libvir-list@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/libvir-list