[PATCH 07/23] builtin/submodule--helper: fix various trivial memory leaks
- From
Patrick Steinhardt <ps@pks.im>
- Date
- Jul 26, 2024, 12:15 UTC
- Message-ID
- <5220c91bda7bc766368c2925499e5d244a03697b.1721995576.git.ps@pks.im>
- In-Reply-To
- <cover.1721995576.git.ps@pks.im>
There are multiple trivial memory leaks in the submodule helper. Fix those.
Signed-off-by: Patrick Steinhardt <ps@pks.im> --- builtin/submodule--helper.c | 13 ++++++++++--- t/t7400-submodule-basic.sh | 1 + 2 files changed, 11 insertions(+), 3 deletions(-)
diff --git a/builtin/submodule--helper.c b/builtin/submodule--helper.c index f1218a1995..5ae06c3e0b 100644 --- a/builtin/submodule--helper.c +++ b/builtin/submodule--helper.c @@ -2269,6 +2269,7 @@ static int is_tip_reachable(const char *path, const struct object_id *oid) struct child_process cp = CHILD_PROCESS_INIT; struct strbuf rev = STRBUF_INIT; char *hex = oid_to_hex(oid); + int reachable; cp.git_cmd = 1; cp.dir = path; @@ -2278,9 +2279,12 @@ static int is_tip_reachable(const char *path, const struct object_id *oid) prepare_submodule_repo_env(&cp.env); if (capture_command(&cp, &rev, GIT_MAX_HEXSZ + 1) || rev.len) - return 0; + reachable = 0; + else + reachable = 1; - return 1; + strbuf_release(&rev); + return reachable; } static int fetch_in_submodule(const char *module_path, int depth, int quiet, @@ -3135,6 +3139,7 @@ static void append_fetch_remotes(struct strbuf *msg, const char *git_dir_path) static int add_submodule(const struct add_data *add_data) { char *submod_gitdir_path; + char *depth_to_free = NULL; struct module_clone_data clone_data = MODULE_CLONE_DATA_INIT; struct string_list reference = STRING_LIST_INIT_NODUP; int ret = -1; @@ -3200,7 +3205,7 @@ static int add_submodule(const struct add_data *add_data) } clone_data.dissociate = add_data->dissociate; if (add_data->depth >= 0) - clone_data.depth = xstrfmt("%d", add_data->depth); + clone_data.depth = depth_to_free = xstrfmt("%d", add_data->depth); if (clone_submodule(&clone_data, &reference)) goto cleanup; @@ -3223,7 +3228,9 @@ static int add_submodule(const struct add_data *add_data) die(_("unable to checkout submodule '%s'"), add_data->sm_path); } ret = 0; + cleanup: + free(depth_to_free); string_list_clear(&reference, 1); return ret; } diff --git a/t/t7400-submodule-basic.sh b/t/t7400-submodule-basic.sh index 981488885f..098d8833b6 100755 --- a/t/t7400-submodule-basic.sh +++ b/t/t7400-submodule-basic.sh @@ -12,6 +12,7 @@ subcommands of git submodule. 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 'setup - enable local submodules' '
-- 2.46.0.rc1.dirty