提交 3db08aea 编写于 作者: E Eric Blake

build: address clang reports about virCommand

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.
上级 1a82c5f7
/* /*
* command.c: Child command execution * 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 * This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public * modify it under the terms of the GNU Lesser General Public
...@@ -881,6 +881,8 @@ virCommandProcessIO(virCommandPtr cmd) ...@@ -881,6 +881,8 @@ virCommandProcessIO(virCommandPtr cmd)
buf = cmd->errbuf; buf = cmd->errbuf;
len = &errlen; len = &errlen;
} }
/* Silence a false positive from clang. */
sa_assert(buf);
done = read(fds[i].fd, data, sizeof(data)); done = read(fds[i].fd, data, sizeof(data));
if (done < 0) { if (done < 0) {
...@@ -930,9 +932,9 @@ virCommandProcessIO(virCommandPtr cmd) ...@@ -930,9 +932,9 @@ virCommandProcessIO(virCommandPtr cmd)
ret = 0; ret = 0;
cleanup: cleanup:
if (*cmd->outbuf) if (cmd->outbuf && *cmd->outbuf)
(*cmd->outbuf)[outlen] = '\0'; (*cmd->outbuf)[outlen] = '\0';
if (*cmd->errbuf) if (cmd->errbuf && *cmd->errbuf)
(*cmd->errbuf)[errlen] = '\0'; (*cmd->errbuf)[errlen] = '\0';
return ret; return ret;
} }
...@@ -950,7 +952,7 @@ virCommandRun(virCommandPtr cmd, int *exitstatus) ...@@ -950,7 +952,7 @@ virCommandRun(virCommandPtr cmd, int *exitstatus)
int ret = 0; int ret = 0;
char *outbuf = NULL; char *outbuf = NULL;
char *errbuf = NULL; char *errbuf = NULL;
int infd[2]; int infd[2] = { -1, -1 };
struct stat st; struct stat st;
bool string_io; bool string_io;
bool async_io = false; bool async_io = false;
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册