repack: fix leaks on error with "goto cleanup"
In cmd_repack() when we hit an error, replace "return ret" with "goto cleanup" to ensure we free the necessary data structures. Helped-by: Elijah Newren <newren@gmail.com> Signed-off-by: Ævar Arnfjörð Bjarmason <avarab@gmail.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
parent
486620ae0c
commit
90428ddccf
@ -948,7 +948,7 @@ int cmd_repack(int argc, const char **argv, const char *prefix)
|
||||
|
||||
ret = start_command(&cmd);
|
||||
if (ret)
|
||||
return ret;
|
||||
goto cleanup;
|
||||
|
||||
if (geometry) {
|
||||
FILE *in = xfdopen(cmd.in, "w");
|
||||
@ -977,7 +977,7 @@ int cmd_repack(int argc, const char **argv, const char *prefix)
|
||||
fclose(out);
|
||||
ret = finish_command(&cmd);
|
||||
if (ret)
|
||||
return ret;
|
||||
goto cleanup;
|
||||
|
||||
if (!names.nr && !po_args.quiet)
|
||||
printf_ln(_("Nothing new to pack."));
|
||||
@ -1007,7 +1007,7 @@ int cmd_repack(int argc, const char **argv, const char *prefix)
|
||||
&existing_nonkept_packs,
|
||||
&existing_kept_packs);
|
||||
if (ret)
|
||||
return ret;
|
||||
goto cleanup;
|
||||
|
||||
if (delete_redundant && expire_to) {
|
||||
/*
|
||||
@ -1039,7 +1039,7 @@ int cmd_repack(int argc, const char **argv, const char *prefix)
|
||||
&existing_nonkept_packs,
|
||||
&existing_kept_packs);
|
||||
if (ret)
|
||||
return ret;
|
||||
goto cleanup;
|
||||
}
|
||||
}
|
||||
|
||||
@ -1115,7 +1115,7 @@ int cmd_repack(int argc, const char **argv, const char *prefix)
|
||||
string_list_clear(&include, 0);
|
||||
|
||||
if (ret)
|
||||
return ret;
|
||||
goto cleanup;
|
||||
}
|
||||
|
||||
reprepare_packed_git(the_repository);
|
||||
@ -1172,10 +1172,11 @@ int cmd_repack(int argc, const char **argv, const char *prefix)
|
||||
write_midx_file(get_object_directory(), NULL, NULL, flags);
|
||||
}
|
||||
|
||||
cleanup:
|
||||
string_list_clear(&names, 1);
|
||||
string_list_clear(&existing_nonkept_packs, 0);
|
||||
string_list_clear(&existing_kept_packs, 0);
|
||||
clear_pack_geometry(geometry);
|
||||
|
||||
return 0;
|
||||
return ret;
|
||||
}
|
||||
|
@ -14,6 +14,7 @@ what currently happens. If that changes, these tests should be revisited.
|
||||
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 'disable reflogs' '
|
||||
|
@ -2,6 +2,7 @@
|
||||
|
||||
test_description='git rev-list should notice bad commits'
|
||||
|
||||
TEST_PASSES_SANITIZE_LEAK=true
|
||||
. ./test-lib.sh
|
||||
|
||||
# Note:
|
||||
|
Loading…
Reference in New Issue
Block a user