[libvirt] [PATCH] util: Fix virGetLastErrorMessage to return proper error when 'err' is NULL

Cole Robinson crobinso at redhat.com
Wed May 11 20:23:22 UTC 2016


On 05/11/2016 02:27 PM, Erik Skultety wrote:
> Both virGetLastError and virGetLastErrorMessage call virLastErrorObject method
> that returns a thread-local error object. However, if a direct call to malloc
> or pthread_setspecific (probably also due to malloc, since it sets ENOMEM)
> fail, virLastErrorObject returns NULL which, although incorrectly interpreted
> by virGetLastError as no error, still requires the caller to check for NULL
> pointer. This isn't the case with virGetLastErrorMessage that also treated it
> incorrectly as no error, but returned the literal "no error".
> This patch tweaks the checks in the virGetLastErrorMessage function, so that
> if virLastErrorObject failed, it returned "unknown error" which is equivalent
> to the current approach with virGetLastError and if it returned NULL,
> "unknown error" was set.
> 
> Signed-off-by: Erik Skultety <eskultet at redhat.com>
> ---
>  src/util/virerror.c | 4 ++--
>  1 file changed, 2 insertions(+), 2 deletions(-)
> 
> diff --git a/src/util/virerror.c b/src/util/virerror.c
> index 5d875e3..1177570 100644
> --- a/src/util/virerror.c
> +++ b/src/util/virerror.c
> @@ -281,9 +281,9 @@ const char *
>  virGetLastErrorMessage(void)
>  {
>      virErrorPtr err = virLastErrorObject();
> -    if (!err || err->code == VIR_ERR_OK)
> +    if (err && err->code == VIR_ERR_OK)
>          return _("no error");
> -    if (err->message == NULL)
> +    if (!err || !err->message)
>          return _("unknown error");
>      return err->message;
>  }
> 

ACK

Thanks,
Cole




More information about the libvir-list mailing list