Skip to content

Commit e72e12c

Browse files
avargitster
authored andcommitted
merge-file: fix memory leaks on error path
Fix a memory leak in "merge-file", we need to loop over the "mmfs" array and free() what we've got so far when we error out. As a result we can mark a test as passing with SANITIZE=leak using "TEST_PASSES_SANITIZE_LEAK=true". Signed-off-by: Ævar Arnfjörð Bjarmason <[email protected]> Signed-off-by: Junio C Hamano <[email protected]>
1 parent 480a0e3 commit e72e12c

File tree

2 files changed

+8
-4
lines changed

2 files changed

+8
-4
lines changed

builtin/merge-file.c

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -87,17 +87,15 @@ int cmd_merge_file(int argc, const char **argv, const char *prefix)
8787

8888
free(fname);
8989
if (ret)
90-
return ret;
90+
goto cleanup;
91+
9192
}
9293

9394
xmp.ancestor = names[1];
9495
xmp.file1 = names[0];
9596
xmp.file2 = names[2];
9697
ret = xdl_merge(mmfs + 1, mmfs + 0, mmfs + 2, &xmp, &result);
9798

98-
for (i = 0; i < 3; i++)
99-
free(mmfs[i].ptr);
100-
10199
if (ret >= 0) {
102100
const char *filename = argv[0];
103101
char *fpath = prefix_filename(prefix, argv[0]);
@@ -118,5 +116,9 @@ int cmd_merge_file(int argc, const char **argv, const char *prefix)
118116
if (ret > 127)
119117
ret = 127;
120118

119+
cleanup:
120+
for (i = 0; i < 3; i++)
121+
free(mmfs[i].ptr);
122+
121123
return ret;
122124
}

t/t6403-merge-file.sh

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
#!/bin/sh
22

33
test_description='RCS merge replacement: merge-file'
4+
5+
TEST_PASSES_SANITIZE_LEAK=true
46
. ./test-lib.sh
57

68
test_expect_success 'setup' '

0 commit comments

Comments
 (0)