builtin/submodule--helper: fix leaking remote ref on errors
When `update_submodule()` fails we return with `die_message()`, which only causes us to print the same message as `die()` would without actually causing the process to die. We don't free memory in that case and thus leak memory. Fix the leak by freeing the remote ref. Signed-off-by: Patrick Steinhardt <ps@pks.im> Signed-off-by: Junio C Hamano <gitster@pobox.com>maint
parent
f1652c04b5
commit
5bf922a4e9
|
@ -2648,15 +2648,20 @@ static int update_submodule(struct update_data *update_data)
|
||||||
|
|
||||||
if (!update_data->nofetch) {
|
if (!update_data->nofetch) {
|
||||||
if (fetch_in_submodule(update_data->sm_path, update_data->depth,
|
if (fetch_in_submodule(update_data->sm_path, update_data->depth,
|
||||||
0, NULL))
|
0, NULL)) {
|
||||||
|
free(remote_ref);
|
||||||
return die_message(_("Unable to fetch in submodule path '%s'"),
|
return die_message(_("Unable to fetch in submodule path '%s'"),
|
||||||
update_data->sm_path);
|
update_data->sm_path);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (repo_resolve_gitlink_ref(the_repository, update_data->sm_path,
|
if (repo_resolve_gitlink_ref(the_repository, update_data->sm_path,
|
||||||
remote_ref, &update_data->oid))
|
remote_ref, &update_data->oid)) {
|
||||||
return die_message(_("Unable to find %s revision in submodule path '%s'"),
|
ret = die_message(_("Unable to find %s revision in submodule path '%s'"),
|
||||||
remote_ref, update_data->sm_path);
|
remote_ref, update_data->sm_path);
|
||||||
|
free(remote_ref);
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
free(remote_ref);
|
free(remote_ref);
|
||||||
}
|
}
|
||||||
|
|
|
@ -10,6 +10,7 @@ as expected.
|
||||||
'
|
'
|
||||||
|
|
||||||
TEST_NO_CREATE_REPO=1
|
TEST_NO_CREATE_REPO=1
|
||||||
|
TEST_PASSES_SANITIZE_LEAK=true
|
||||||
. ./test-lib.sh
|
. ./test-lib.sh
|
||||||
|
|
||||||
test_expect_success 'setup' '
|
test_expect_success 'setup' '
|
||||||
|
|
Loading…
Reference in New Issue