Fix off-by-1 in virFileAbsPath.

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
This commit is contained in:
Daniel P. Berrange 2011-02-22 17:08:12 +00:00
parent 08fb2a9ce8
commit 9f5bbe3b92

View File

@ -1990,30 +1990,22 @@ 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;
}