When opening argv[3], if open() succeeds but fstat() fails, the file descriptor is not closed, resulting in a resource leak. This patch ensures that the descriptor is closed on failure. Signed-off-by: Hoyoung Lee <lhywkd22@xxxxxxxxx> --- builtin/archive.c | 3 ++- t/helper/test-delta.c | 2 ++ 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/builtin/archive.c b/builtin/archive.c index c919a39f90..951fc2e444 100644 --- a/builtin/archive.c +++ b/builtin/archive.c @@ -13,9 +13,10 @@ static void create_output_file(const char *output_file) { int output_fd = xopen(output_file, O_CREAT | O_WRONLY | O_TRUNC, 0666); if (output_fd != 1) { - if (dup2(output_fd, 1) < 0) + if (dup2(output_fd, 1) < 0) { close(output_fd); die_errno(_("could not redirect output")); + } else close(output_fd); } diff --git a/t/helper/test-delta.c b/t/helper/test-delta.c index 103bf7f3e9..ba2d897aa3 100644 --- a/t/helper/test-delta.c +++ b/t/helper/test-delta.c @@ -46,6 +46,8 @@ int cmd__delta(int argc, const char **argv) fd = open(argv[3], O_RDONLY); if (fd < 0 || fstat(fd, &st)) { perror(argv[3]); + if (fd >= 0) + close(fd); goto cleanup; } data_size = st.st_size; -- 2.34.1