Re: [PATCH v2 11/11] bisect: handle dup() failure when redirecting stdout

Junio C Hamano <[email protected]> Thu, 06 Aug 2026 10:31:39 -0700
Newsgroups org.kernel.vger.git
Message-ID <[email protected]>
Jeff King <[email protected]> writes:

> On Wed, Aug 05, 2026 at 06:31:00PM +0000, Johannes Schindelin via GitGitGadget wrote:
>
>> diff --git a/builtin/bisect.c b/builtin/bisect.c
>> index ceb60b0626..733d28d377 100644
>> --- a/builtin/bisect.c
>> +++ b/builtin/bisect.c
>> @@ -1308,7 +1308,12 @@ static int bisect_run(struct bisect_terms *terms, int argc, const char **argv)
>>  
>>  		fflush(stdout);
>>  		saved_stdout = dup(1);
>> -		dup2(temporary_stdout_fd, 1);
>> +		if (saved_stdout < 0 ||
>> +		    dup2(temporary_stdout_fd, 1) < 0) {
>> +			res = error_errno(_("could not duplicate stdout"));
>> +			close(temporary_stdout_fd);
>> +			break;
>> +		}
>
> Ironically this produces a new Coverity complaint. ;)
>
> If dup2() fails, then we break out of the loop, leaking saved_stdout.

I didn't notice it while I was looking at this part, and wondering
if we can (and should) do anything if close() failed there.