[PATCH v3 2/2] t/helper/test-delta: fix possible resource leak and ensure safe cleanup
- From
Hoyoung Lee <lhywkd22@gmail.com>
- Date
- Jul 22, 2025, 17:41 UTC
- Message-ID
- <20250722174102.1876197-3-lhywkd22@gmail.com>
- In-Reply-To
- <20250722174102.1876197-1-lhywkd22@gmail.com>
Initialize `fd` to -1 and unify all `open()`-related `close()` calls under a single cleanup label. This prevents undefined behavior when `fd` is used without initialization in error paths.
The cleanup logic now safely avoids calling `close()` on invalid descriptors and ensures consistent resource management.
Signed-off-by: Hoyoung Lee <lhywkd22@gmail.com> --- t/helper/test-delta.c | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-)
diff --git a/t/helper/test-delta.c b/t/helper/test-delta.c index 6bc787a474..f5811e96ad 100644 --- a/t/helper/test-delta.c +++ b/t/helper/test-delta.c @@ -17,7 +17,7 @@ static const char usage_str[] = int cmd__delta(int argc, const char **argv) { - int fd; + int fd = -1; struct stat st; void *from_buf = NULL, *data_buf = NULL, *out_buf = NULL; unsigned long from_size, data_size, out_size; @@ -31,13 +31,12 @@ int cmd__delta(int argc, const char **argv) fd = open(argv[2], O_RDONLY); if (fd < 0 || fstat(fd, &st)) { perror(argv[2]); - return 1; + goto cleanup; } from_size = st.st_size; from_buf = xmalloc(from_size); if (read_in_full(fd, from_buf, from_size) < 0) { perror(argv[2]); - close(fd); goto cleanup; } close(fd); @@ -51,7 +50,6 @@ int cmd__delta(int argc, const char **argv) data_buf = xmalloc(data_size); if (read_in_full(fd, data_buf, data_size) < 0) { perror(argv[3]); - close(fd); goto cleanup; } close(fd); @@ -81,5 +79,8 @@ int cmd__delta(int argc, const char **argv) free(data_buf); free(out_buf); + if (fd >= 0) + close(fd); + return ret; }
-- 2.34.1