mirror of
https://github.com/git/git
synced 2024-08-27 11:39:22 +00:00
![Jeff King](/assets/img/avatar_default.png)
We call repo_get_merge_bases(), which allocates a commit_list, but never free the result, causing a leak. The obvious solution is to free it, but we need to look at the contents of the first item to decide whether to leave the loop. One option is to free it in both code paths. But since the commit that the list points to is longer-lived than the list itself, we can just dereference it immediately, free the list, and then continue with the existing logic. This is about the same amount of code, but keeps the list management all in one place. This lets us mark a number of merge-related test scripts as leak-free. Signed-off-by: Jeff King <peff@peff.net> Signed-off-by: Junio C Hamano <gitster@pobox.com>
34 lines
1 KiB
Bash
Executable file
34 lines
1 KiB
Bash
Executable file
#!/bin/sh
|
|
|
|
test_description="Test that merge state is as expected after failed merge"
|
|
|
|
GIT_TEST_DEFAULT_INITIAL_BRANCH_NAME=main
|
|
export GIT_TEST_DEFAULT_INITIAL_BRANCH_NAME
|
|
TEST_PASSES_SANITIZE_LEAK=true
|
|
. ./test-lib.sh
|
|
|
|
test_expect_success 'Ensure we restore original state if no merge strategy handles it' '
|
|
test_commit --no-tag "Initial" base base &&
|
|
|
|
for b in branch1 branch2 branch3
|
|
do
|
|
git checkout -b $b main &&
|
|
test_commit --no-tag "Change on $b" base $b || return 1
|
|
done &&
|
|
|
|
git checkout branch1 &&
|
|
# This is a merge that octopus cannot handle. Note, that it does not
|
|
# just hit conflicts, it completely fails and says that it cannot
|
|
# handle this type of merge.
|
|
test_expect_code 2 git merge branch2 branch3 >output 2>&1 &&
|
|
grep "fatal: merge program failed" output &&
|
|
grep "Should not be doing an octopus" output &&
|
|
|
|
# Make sure we did not leave stray changes around when no appropriate
|
|
# merge strategy was found
|
|
git diff --exit-code --name-status &&
|
|
test_path_is_missing .git/MERGE_HEAD
|
|
'
|
|
|
|
test_done
|