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