Git fork

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 <avarab@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

authored by

Ævar Arnfjörð Bjarmason and committed by
Junio C Hamano
e72e12cc 480a0e30

+8 -4
+6 -4
builtin/merge-file.c
··· 87 87 88 88 free(fname); 89 89 if (ret) 90 - return ret; 90 + goto cleanup; 91 + 91 92 } 92 93 93 94 xmp.ancestor = names[1]; 94 95 xmp.file1 = names[0]; 95 96 xmp.file2 = names[2]; 96 97 ret = xdl_merge(mmfs + 1, mmfs + 0, mmfs + 2, &xmp, &result); 97 - 98 - for (i = 0; i < 3; i++) 99 - free(mmfs[i].ptr); 100 98 101 99 if (ret >= 0) { 102 100 const char *filename = argv[0]; ··· 117 115 118 116 if (ret > 127) 119 117 ret = 127; 118 + 119 + cleanup: 120 + for (i = 0; i < 3; i++) 121 + free(mmfs[i].ptr); 120 122 121 123 return ret; 122 124 }
+2
t/t6403-merge-file.sh
··· 1 1 #!/bin/sh 2 2 3 3 test_description='RCS merge replacement: merge-file' 4 + 5 + TEST_PASSES_SANITIZE_LEAK=true 4 6 . ./test-lib.sh 5 7 6 8 test_expect_success 'setup' '