提交 ca043b8c 编写于 作者: P Peter Krempa

util: Improve error reporting from absolutePathFromBaseFile helper

There are multiple reasons canonicalize_file_name() used in
absolutePathFromBaseFile helper can fail. This patch enhances error
reporting from that helper.
上级 037a49dc
......@@ -530,22 +530,36 @@ qedGetBackingStore(char **res,
static char *
absolutePathFromBaseFile(const char *base_file, const char *path)
{
char *res;
char *tmp;
size_t d_len = dir_len (base_file);
char *res = NULL;
char *tmp = NULL;
size_t d_len = dir_len(base_file);
/* If path is already absolute, or if dirname(base_file) is ".",
just return a copy of path. */
if (*path == '/' || d_len == 0)
return canonicalize_file_name(path);
if (*path == '/' || d_len == 0) {
if (!(res = canonicalize_file_name(path)))
virReportSystemError(errno,
_("Can't canonicalize path '%s'"), path);
goto cleanup;
}
/* Ensure that the following cast-to-int is valid. */
if (d_len > INT_MAX)
return NULL;
if (d_len > INT_MAX) {
virReportError(VIR_ERR_INTERNAL_ERROR,
_("Directory name too long: '%s'"), base_file);
goto cleanup;
}
if (virAsprintf(&tmp, "%.*s/%s", (int) d_len, base_file, path) < 0)
return NULL;
res = canonicalize_file_name(tmp);
if (virAsprintf(&tmp, "%.*s/%s", (int) d_len, base_file, path) < 0) {
virReportOOMError();
goto cleanup;
}
if (!(res = canonicalize_file_name(tmp)))
virReportSystemError(errno, _("Can't canonicalize path '%s'"), path);
cleanup:
VIR_FREE(tmp);
return res;
}
......@@ -713,7 +727,6 @@ virStorageFileGetMetadataFromBuf(int format,
meta->backingStoreRaw = meta->backingStore;
meta->backingStore = absolutePathFromBaseFile(path, backing);
if (meta->backingStore == NULL) {
virReportOOMError();
VIR_FREE(backing);
return -1;
}
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册