]> xenbits.xensource.com Git - libvirt.git/commitdiff
build: address clang reports about virCommand
authorEric Blake <eblake@redhat.com>
Mon, 14 Feb 2011 22:24:08 +0000 (15:24 -0700)
committerEric Blake <eblake@redhat.com>
Tue, 15 Feb 2011 17:43:40 +0000 (10:43 -0700)
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

index 258dc138e8a2b22f5ba14d1c52e46a7efc297317..0d5cb7986c9dd6ab12f22e048a1861e0ac263274 100644 (file)
@@ -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;