loose: avoid closing invalid fd on error path

write_one_object() opens a file at line 186 and jumps to the
errout label on failure. The errout cleanup unconditionally calls
close(fd), but when open() itself failed, fd is -1. Calling
close(-1) is harmless on most platforms (returns EBADF) but is
undefined behavior per POSIX and can confuse fd tracking in
sanitizer builds.

Guard the close with fd >= 0.

Pointed out by Coverity.

Assisted-by: Claude Opus 4.6
Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
seen
Johannes Schindelin 2026-07-01 07:04:20 +00:00 committed by Junio C Hamano
parent fa43c77def
commit 7900edcf76
1 changed files with 2 additions and 1 deletions

View File

@ -202,7 +202,8 @@ static int write_one_object(struct odb_source_loose *loose,
return 0;
errout:
error_errno(_("failed to write loose object index %s"), path.buf);
close(fd);
if (fd >= 0)
close(fd);
rollback_lock_file(&lock);
strbuf_release(&buf);
strbuf_release(&path);