[PATCH v2 02/12] loose: avoid closing invalid fd on error path
From: Johannes Schindelin via GitGitGadget <hidden>
Date: 2026-07-05 08:24:36
Subsystem:
the rest · Maintainer:
Linus Torvalds
From: Johannes Schindelin via GitGitGadget <hidden>
Date: 2026-07-05 08:24:36
Subsystem:
the rest · Maintainer:
Linus Torvalds
From: Johannes Schindelin <redacted> `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 <redacted> --- loose.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/loose.c b/loose.c
index 940a9e0dfe..bf01d3e42d 100644
--- a/loose.c
+++ b/loose.c@@ -201,7 +201,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);
--
gitgitgadget