Skip to content

Commit ff67083

Browse files
pks-tgitster
authored andcommitted
builtin/merge: release output buffer after performing merge
The `obuf` member of `struct merge_options` is used to buffer output in some cases. In order to not discard its allocated memory we only release its contents in `merge_finalize()` when we're not currently recursing into a subtree. This results in some situations where we seemingly do not release the buffer reliably. We thus have calls to `strbuf_release()` for this buffer scattered across the codebase. But we're missing one callsite in git-merge(1), which causes a memory leak. We should ideally refactor this interface so that callers don't have to know about any such internals. But for now, paper over the issue by adding one more `strbuf_release()` call. Signed-off-by: Patrick Steinhardt <ps@pks.im> Signed-off-by: Junio C Hamano <gitster@pobox.com>
1 parent 813b12b commit ff67083

File tree

2 files changed

+2
-0
lines changed

2 files changed

+2
-0
lines changed

builtin/merge.c

+1
Original file line numberDiff line numberDiff line change
@@ -754,6 +754,7 @@ static int try_merge_strategy(const char *strategy, struct commit_list *common,
754754
clean = merge_recursive(&o, head, remoteheads->item,
755755
reversed, &result);
756756
free_commit_list(reversed);
757+
strbuf_release(&o.obuf);
757758

758759
if (clean < 0) {
759760
rollback_lock_file(&lock);

t/t6424-merge-unrelated-index-changes.sh

+1
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
test_description="merges with unrelated index changes"
44

5+
TEST_PASSES_SANITIZE_LEAK=true
56
. ./test-lib.sh
67

78
# Testcase for some simple merges

0 commit comments

Comments
 (0)