[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]

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



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


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]