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>

Ævar Arnfjörð Bjarmason committed Jul 1, 2022 at 12:37 UTC f40a693450853fda1b121d7d8c082271c54d03fb
2 files changed +16 -7
t/helper/test-delta.c
+14 -7
@@ -20,8 +20,9 @@ int cmd__delta(int argc, const char **argv)
20 {
21 int fd;
22 struct stat st;
23 - void *from_buf, *data_buf, *out_buf;
23 + void *from_buf = NULL, *data_buf = NULL, *out_buf = NULL;
24 unsigned long from_size, data_size, out_size;
25 + int ret = 1;
26
27 if (argc != 5 || (strcmp(argv[1], "-d") && strcmp(argv[1], "-p"))) {
28 fprintf(stderr, "usage: %s\n", usage_str);
@@ -38,21 +39,21 @@ int cmd__delta(int argc, const char **argv)
39 if (read_in_full(fd, from_buf, from_size) < 0) {
40 perror(argv[2]);
41 close(fd);
41 - return 1;
42 + goto cleanup;
43 }
44 close(fd);
45
46 fd = open(argv[3], O_RDONLY);
47 if (fd < 0 || fstat(fd, &st)) {
48 perror(argv[3]);
48 - return 1;
49 + goto cleanup;
50 }
51 data_size = st.st_size;
52 data_buf = xmalloc(data_size);
53 if (read_in_full(fd, data_buf, data_size) < 0) {
54 perror(argv[3]);
55 close(fd);
55 - return 1;
56 + goto cleanup;
57 }
58 close(fd);
59
@@ -66,14 +67,20 @@ int cmd__delta(int argc, const char **argv)
67 &out_size);
68 if (!out_buf) {
69 fprintf(stderr, "delta operation failed (returned NULL)\n");
69 - return 1;
70 + goto cleanup;
71 }
72
73 fd = open (argv[4], O_WRONLY|O_CREAT|O_TRUNC, 0666);
74 if (fd < 0 || write_in_full(fd, out_buf, out_size) < 0) {
75 perror(argv[4]);
75 - return 1;
76 + goto cleanup;
77 }
78
78 - return 0;
79 + ret = 0;
80 +cleanup:
81 + free(from_buf);
82 + free(data_buf);
83 + free(out_buf);
84 +
85 + return ret;
86 }
t/t5303-pack-corruption-resilience.sh
+2
@@ -4,6 +4,8 @@
4 #
5
6 test_description='resilience to pack corruptions with redundant objects'
7 +
8 +TEST_PASSES_SANITIZE_LEAK=true
9 . ./test-lib.sh
10
11 # Note: the test objects are created with knowledge of their pack encoding