Skip to content

Commit 5c950e9

Browse files
peffgitster
authored andcommitted
wt-status: use capture_command
When we spawn "git submodule status" to read its output, we use run_command() followed by strbuf_read() read from the 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 capture_command helper. Signed-off-by: Jeff King <[email protected]> Signed-off-by: Junio C Hamano <[email protected]>
1 parent 911ec99 commit 5c950e9

File tree

1 file changed

+1
-4
lines changed

1 file changed

+1
-4
lines changed

wt-status.c

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -744,11 +744,8 @@ static void wt_status_print_submodule_summary(struct wt_status *s, int uncommitt
744744

745745
sm_summary.git_cmd = 1;
746746
sm_summary.no_stdin = 1;
747-
sm_summary.out = -1;
748747

749-
run_command(&sm_summary);
750-
751-
strbuf_read(&cmd_stdout, sm_summary.out, 1024);
748+
capture_command(&sm_summary, &cmd_stdout, 1024);
752749

753750
/* prepend header, only if there's an actual output */
754751
if (cmd_stdout.len) {

0 commit comments

Comments
 (0)