diff options
author | Ævar Arnfjörð Bjarmason <avarab@gmail.com> | 2022-07-01 10:37:40 (GMT) |
---|---|---|
committer | Junio C Hamano <gitster@pobox.com> | 2022-07-01 20:38:50 (GMT) |
commit | f40a693450853fda1b121d7d8c082271c54d03fb (patch) | |
tree | aed19854554aeda3cefc0e5069d187b611082913 /t/helper | |
parent | 34e691288d4e465fa457f6519ddbdc0f062a0619 (diff) | |
download | git-f40a693450853fda1b121d7d8c082271c54d03fb.zip git-f40a693450853fda1b121d7d8c082271c54d03fb.tar.gz git-f40a693450853fda1b121d7d8c082271c54d03fb.tar.bz2 |
test-tool delta: fix a memory leak
Fix a memory leak introduced in a310d434946 ([PATCH] Deltification
library work by Nicolas Pitre., 2005-05-19), as a result we can mark
another test as passing with SANITIZE=leak using
"TEST_PASSES_SANITIZE_LEAK=true".
Signed-off-by: Ævar Arnfjörð Bjarmason <avarab@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
Diffstat (limited to 't/helper')
-rw-r--r-- | t/helper/test-delta.c | 21 |
1 files changed, 14 insertions, 7 deletions
diff --git a/t/helper/test-delta.c b/t/helper/test-delta.c index e749a49..b15481e 100644 --- a/t/helper/test-delta.c +++ b/t/helper/test-delta.c @@ -20,8 +20,9 @@ int cmd__delta(int argc, const char **argv) { int fd; struct stat st; - void *from_buf, *data_buf, *out_buf; + void *from_buf = NULL, *data_buf = NULL, *out_buf = NULL; unsigned long from_size, data_size, out_size; + int ret = 1; if (argc != 5 || (strcmp(argv[1], "-d") && strcmp(argv[1], "-p"))) { fprintf(stderr, "usage: %s\n", usage_str); @@ -38,21 +39,21 @@ int cmd__delta(int argc, const char **argv) if (read_in_full(fd, from_buf, from_size) < 0) { perror(argv[2]); close(fd); - return 1; + goto cleanup; } close(fd); fd = open(argv[3], O_RDONLY); if (fd < 0 || fstat(fd, &st)) { perror(argv[3]); - return 1; + goto cleanup; } data_size = st.st_size; data_buf = xmalloc(data_size); if (read_in_full(fd, data_buf, data_size) < 0) { perror(argv[3]); close(fd); - return 1; + goto cleanup; } close(fd); @@ -66,14 +67,20 @@ int cmd__delta(int argc, const char **argv) &out_size); if (!out_buf) { fprintf(stderr, "delta operation failed (returned NULL)\n"); - return 1; + goto cleanup; } fd = open (argv[4], O_WRONLY|O_CREAT|O_TRUNC, 0666); if (fd < 0 || write_in_full(fd, out_buf, out_size) < 0) { perror(argv[4]); - return 1; + goto cleanup; } - return 0; + ret = 0; +cleanup: + free(from_buf); + free(data_buf); + free(out_buf); + + return ret; } |