[libvirt] [PATCHv2 1/2] virBitmapParse: Fix behavior in case of error
Daniel P. Berrange
berrange at redhat.com
Wed Aug 21 12:59:36 UTC 2013
On Tue, Aug 20, 2013 at 11:33:43AM +0200, Peter Krempa wrote:
> Re-arrange the code so that the returned bitmap is always initialized to
> NULL even on early failures and return an error message as some callers
> are already expecting it.
> ---
>
> Notes:
> Version 2:
> Was already ACKed in v1, but:
> * fixed bracing of arguments of the _() macro
> * added src/uti/virbitmap.c to po/POTFILES.in
> (noticed by doing a full build ... )
>
> po/POTFILES.in | 1 +
> src/util/virbitmap.c | 18 +++++++++---------
> 2 files changed, 10 insertions(+), 9 deletions(-)
>
> diff --git a/po/POTFILES.in b/po/POTFILES.in
> index 36d027a..9a83069 100644
> --- a/po/POTFILES.in
> +++ b/po/POTFILES.in
> @@ -147,6 +147,7 @@ src/util/viralloc.c
> src/util/viraudit.c
> src/util/virauth.c
> src/util/virauthconfig.c
> +src/util/virbitmap.c
> src/util/vircgroup.c
> src/util/virclosecallbacks.c
> src/util/vircommand.c
> diff --git a/src/util/virbitmap.c b/src/util/virbitmap.c
> index 47c678e..289a7b9 100644
> --- a/src/util/virbitmap.c
> +++ b/src/util/virbitmap.c
> @@ -298,23 +298,21 @@ virBitmapParse(const char *str,
> size_t bitmapSize)
> {
> bool neg = false;
> - const char *cur;
> + const char *cur = str;
> char *tmp;
> size_t i;
> int start, last;
>
> - if (!str)
> + if (!(*bitmap = virBitmapNew(bitmapSize)))
> return -1;
>
> - cur = str;
> - virSkipSpaces(&cur);
> + if (!str)
> + goto error;
>
> - if (*cur == 0)
> - return -1;
> + virSkipSpaces(&cur);
>
> - *bitmap = virBitmapNew(bitmapSize);
> - if (!*bitmap)
> - return -1;
> + if (*cur == '\0')
> + goto error;
>
> while (*cur != 0 && *cur != terminator) {
> /*
> @@ -384,6 +382,8 @@ virBitmapParse(const char *str,
> return virBitmapCountBits(*bitmap);
>
> error:
> + virReportError(VIR_ERR_INTERNAL_ERROR,
> + _("Failed to parse bitmap '%s'"), str);
If you're going to add this, then you must fix all the callers
which currently report their own error.
# git grep --after 4 virBitmapParse src/
Shows a great many needing fixing.
Daniel
--
|: http://berrange.com -o- http://www.flickr.com/photos/dberrange/ :|
|: http://libvirt.org -o- http://virt-manager.org :|
|: http://autobuild.org -o- http://search.cpan.org/~danberr/ :|
|: http://entangle-photo.org -o- http://live.gnome.org/gtk-vnc :|
More information about the libvir-list
mailing list