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@xxxxxxxxx> --- 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