]> git.ipfire.org Git - thirdparty/git.git/commit
merge: fix leak with merge.defaultToUpstream
authorToon Claes <toon@iotcl.com>
Tue, 28 Jul 2026 13:00:04 +0000 (15:00 +0200)
committerJunio C Hamano <gitster@pobox.com>
Tue, 28 Jul 2026 18:07:19 +0000 (11:07 -0700)
commit68cce04a028cac13fa1fd7a368801fac3d8b156b
treed9ccac4c502d75fcd2bf1dcf2a5a60995944f587
parent94f057755b7941b321fd11fec1b2e3ca5313a4e0
merge: fix leak with merge.defaultToUpstream

By default the setting 'merge.defaultToUpstream' for git-merge(1) is set
to 'true', which means when `git merge` is invoked with no arguments it
merges the upstream branch configured for the current branch.

With this configuration set to 'true', setup_with_upstream() is called.
That function allocates an array of arguments and hands it back to
cmd_merge() via its `argv` parameter. This array is never freed, so
cmd_merge() leaks it on every invocation.

Track the allocated array in a separate variable and free it at the end.

The leak has been present since 93e535a5b7 (merge: merge with the
default upstream branch without argument, 2011-03-24). Although the leak
sanitizer was enabled for tests in fc1ddf42af (t: remove
TEST_PASSES_SANITIZE_LEAK annotations, 2024-11-21), it went unnoticed
because no test calls `git merge` without arguments, exercising the
default-to-upstream path. Add such a test in t7600, which fails under
the leak sanitizer without this fix.

Signed-off-by: Toon Claes <toon@iotcl.com>
Acked-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
builtin/merge.c
t/t7600-merge.sh