[libvirt] [PATCH] util: Improve error reporting from absolutePathFromBaseFile helper
Martin Kletzander
mkletzan at redhat.com
Wed Oct 31 10:40:25 UTC 2012
On 10/31/2012 11:19 AM, Peter Krempa wrote:
> There are multiple reasons canonicalize_file_name() used in
> absolutePathFromBaseFile helper can fail. This patch enhances error
> reporting from that helper.
> ---
> src/util/storage_file.c | 35 ++++++++++++++++++++++++-----------
> 1 file changed, 24 insertions(+), 11 deletions(-)
>
> diff --git a/src/util/storage_file.c b/src/util/storage_file.c
> index e0b4178..f4c2943 100644
> --- a/src/util/storage_file.c
> +++ b/src/util/storage_file.c
> @@ -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);
Forgot to gettext here: _("Directory name too long: '%s'")
> + 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;
> }
>
ACK with that fixed,
Martin
More information about the libvir-list
mailing list