rebase: don't leak on "--abort"

Fix a leak in the recent 6159e7add4 (rebase --abort: improve reflog
message, 2022-10-12). Before that commit we'd strbuf_release() the
reflog message we were formatting, but when that code was refactored
to use "ropts.head_msg" the strbuf_release() was omitted.

Ideally the three users of "ropts" in cmd_rebase() should use
different "ropts" variables, in practice they're completely separate,
as this and the other user in the "switch" statement will "goto
cleanup", which won't touch "ropts".

The third caller after the "switch" is then unreachable if we take
these two branches, so all of them are getting a "{ 0 }" init'd
"ropts".

So it's OK that we're leaving a stale pointer in "ropts.head_msg",
cleaning it up was our responsibility, and it won't be used again.

Signed-off-by: Ævar Arnfjörð Bjarmason <avarab@gmail.com>
Signed-off-by: Taylor Blau <me@ttaylorr.com>
This commit is contained in:
Ævar Arnfjörð Bjarmason 2022-11-08 19:17:48 +01:00 committed by Taylor Blau
parent 4b01badfac
commit 2454e48fe3
2 changed files with 2 additions and 0 deletions

View file

@ -1322,6 +1322,7 @@ int cmd_rebase(int argc, const char **argv, const char *prefix)
if (reset_head(the_repository, &ropts) < 0) if (reset_head(the_repository, &ropts) < 0)
die(_("could not move back to %s"), die(_("could not move back to %s"),
oid_to_hex(&options.orig_head->object.oid)); oid_to_hex(&options.orig_head->object.oid));
strbuf_release(&head_msg);
remove_branch_state(the_repository, 0); remove_branch_state(the_repository, 0);
ret = finish_rebase(&options); ret = finish_rebase(&options);
goto cleanup; goto cleanup;

View file

@ -9,6 +9,7 @@ test_description='per-repo forced setting of email address'
GIT_TEST_DEFAULT_INITIAL_BRANCH_NAME=main GIT_TEST_DEFAULT_INITIAL_BRANCH_NAME=main
export GIT_TEST_DEFAULT_INITIAL_BRANCH_NAME export GIT_TEST_DEFAULT_INITIAL_BRANCH_NAME
TEST_PASSES_SANITIZE_LEAK=true
. ./test-lib.sh . ./test-lib.sh
test_expect_success 'setup a likely user.useConfigOnly use case' ' test_expect_success 'setup a likely user.useConfigOnly use case' '