[libvirt] [PATCH] build: address clang reports about virCommand

Laine Stump laine at laine.org
Tue Feb 15 17:41:57 UTC 2011


On 02/14/2011 05:30 PM, Eric Blake wrote:
> clang had 5 reports against virCommand; three were false positives
> (a NULL deref in ProcessIO solved by sa_assert, and two uninitialized
> memory operations solved by adding an initializer), but two were real.
>
> * src/util/command.c (virCommandProcessIO): Fix real bug of
> possible NULL dereference.  Teach clang that buf is never NULL.
> (virCommandRun): Teach clang that infd is only ever accessed when
> initialized.
> ---
>   src/util/command.c |   10 ++++++----
>   1 files changed, 6 insertions(+), 4 deletions(-)
>
> diff --git a/src/util/command.c b/src/util/command.c
> index abd2dc4..0845db4 100644
> --- a/src/util/command.c
> +++ b/src/util/command.c
> @@ -1,7 +1,7 @@
>   /*
>    * command.c: Child command execution
>    *
> - * Copyright (C) 2010 Red Hat, Inc.
> + * Copyright (C) 2010-2011 Red Hat, Inc.
>    *
>    * This library is free software; you can redistribute it and/or
>    * modify it under the terms of the GNU Lesser General Public
> @@ -881,6 +881,8 @@ virCommandProcessIO(virCommandPtr cmd)
>                       buf = cmd->errbuf;
>                       len =&errlen;
>                   }
> +                /* Silence a false positive from clang. */
> +                sa_assert(buf);
>
>                   done = read(fds[i].fd, data, sizeof(data));
>                   if (done<  0) {
> @@ -930,9 +932,9 @@ virCommandProcessIO(virCommandPtr cmd)
>
>       ret = 0;
>   cleanup:
> -    if (*cmd->outbuf)
> +    if (cmd->outbuf&&  *cmd->outbuf)
>           (*cmd->outbuf)[outlen] = '\0';
> -    if (*cmd->errbuf)
> +    if (cmd->errbuf&&  *cmd->errbuf)
>           (*cmd->errbuf)[errlen] = '\0';
>       return ret;
>   }
> @@ -950,7 +952,7 @@ virCommandRun(virCommandPtr cmd, int *exitstatus)
>       int ret = 0;
>       char *outbuf = NULL;
>       char *errbuf = NULL;
> -    int infd[2];
> +    int infd[2] = { -1, -1 };
>       struct stat st;
>       bool string_io;
>       bool async_io = false;

ACK




More information about the libvir-list mailing list