[PATCH 4/7] wt-status: use strbuf_read_cmd
- From
Jeff King <peff@peff.net>
- Date
- Mar 22, 2015, 10:08 UTC
- Message-ID
- <20150322100829.GD11615@peff.net>
- In-Reply-To
- <20150322095924.GA24651@peff.net>
When we spawn "git submodule status" to read its output, we use run_command() followed by a strbuf_read() from a pipe. This can deadlock if the subprocess output is larger than the system pipe buffer.
Furthermore, if start_command() fails, we'll try to read from a bogus descriptor (probably "-1" or a descriptor we just closed, but it is a bad idea for us to make assumptions about how start_command implements its error handling). And if start_command succeeds, we leak the file descriptor for the pipe to the child.
All of these can be solved by using the strbuf_read_cmd helper.
Signed-off-by: Jeff King <peff@peff.net> --- wt-status.c | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-)
diff --git a/wt-status.c b/wt-status.c index b47f6d9..fd85d61 100644 --- a/wt-status.c +++ b/wt-status.c @@ -744,11 +744,8 @@ static void wt_status_print_submodule_summary(struct wt_status *s, int uncommitt sm_summary.git_cmd = 1; sm_summary.no_stdin = 1; - sm_summary.out = -1; - run_command(&sm_summary); - - strbuf_read(&cmd_stdout, sm_summary.out, 1024); + strbuf_read_cmd(&cmd_stdout, &sm_summary, 1024); /* prepend header, only if there's an actual output */ if (cmd_stdout.len) {
-- 2.3.3.618.ga041503