merge-ort: unconditionally release attributes index
We conditionally release the index used for reading gitattributes in merge-ort based on whether or the index has been populated. This check uses `cache_nr` as a condition. This isn't sufficient though, as the variable may be zero even when some other parts of the index have been populated. This leads to memory leaks when sparse checkouts are in use, as we may not end up releasing the sparse checkout patterns. Fix this issue by unconditionally releasing the index. Signed-off-by: Patrick Steinhardt <ps@pks.im> Signed-off-by: Junio C Hamano <gitster@pobox.com>
Patrick Steinhardt committed
Aug 14, 2024 at 08:52 UTC
de54b450a3275e98858bf7e83475ad2465cce073
5 files changed
+5
-2
merge-ort.c
+1
-2
@@ -689,8 +689,7 @@ static void clear_or_reinit_internal_opts(struct merge_options_internal *opti,
689
*/
690
strmap_clear_func(&opti->conflicted, 0);
691
692
- if (opti->attr_index.cache_nr) /* true iff opt->renormalize */
693
- discard_index(&opti->attr_index);
692
+ discard_index(&opti->attr_index);
693
694
/* Free memory used by various renames maps */
695
for (i = MERGE_SIDE1; i <= MERGE_SIDE2; ++i) {
t/t3507-cherry-pick-conflict.sh
+1
@@ -13,6 +13,7 @@ GIT_TEST_DEFAULT_INITIAL_BRANCH_NAME=main
13
export GIT_TEST_DEFAULT_INITIAL_BRANCH_NAME
14
15
TEST_CREATE_REPO_NO_TEMPLATE=1
16
+TEST_PASSES_SANITIZE_LEAK=true
17
. ./test-lib.sh
18
19
pristine_detach () {
t/t6421-merge-partial-clone.sh
+1
@@ -26,6 +26,7 @@ test_description="limiting blob downloads when merging with partial clones"
26
# underscore notation is to differentiate different
27
# files that might be renamed into each other's paths.)
28
29
+TEST_PASSES_SANITIZE_LEAK=true
30
. ./test-lib.sh
31
. "$TEST_DIRECTORY"/lib-merge.sh
32
t/t6428-merge-conflicts-sparse.sh
+1
@@ -22,6 +22,7 @@ test_description="merge cases"
22
# underscore notation is to differentiate different
23
# files that might be renamed into each other's paths.)
24
25
+TEST_PASSES_SANITIZE_LEAK=true
26
. ./test-lib.sh
27
. "$TEST_DIRECTORY"/lib-merge.sh
28
t/t7817-grep-sparse-checkout.sh
+1
@@ -33,6 +33,7 @@ should leave the following structure in the working tree:
33
But note that sub2 should have the SKIP_WORKTREE bit set.
34
'
35
36
+TEST_PASSES_SANITIZE_LEAK=true
37
. ./test-lib.sh
38
39
test_expect_success 'setup' '