submodule: fix leaking update strategy

We're not freeing the submodule update strategy command. Provide a
helper function that does this for us and call it in
`update_data_release()`.

Signed-off-by: Patrick Steinhardt <ps@pks.im>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
Patrick Steinhardt 2024-09-26 13:46:08 +02:00 committed by Junio C Hamano
parent 3aef7a05ad
commit 2e492f2047
5 changed files with 12 additions and 3 deletions

View File

@ -2021,6 +2021,7 @@ struct update_data {
static void update_data_release(struct update_data *ud)
{
free(ud->displaypath);
submodule_update_strategy_release(&ud->update_strategy);
module_list_release(&ud->list);
}

View File

@ -95,7 +95,7 @@ static void free_one_config(struct submodule_entry *entry)
free((void *) entry->config->branch);
free((void *) entry->config->url);
free((void *) entry->config->ignore);
free((void *) entry->config->update_strategy.command);
submodule_update_strategy_release(&entry->config->update_strategy);
free(entry->config);
}

View File

@ -424,6 +424,11 @@ int parse_submodule_update_strategy(const char *value,
return 0;
}
void submodule_update_strategy_release(struct submodule_update_strategy *strategy)
{
free((char *) strategy->command);
}
const char *submodule_update_type_to_string(enum submodule_update_type type)
{
switch (type) {

View File

@ -41,6 +41,10 @@ struct submodule_update_strategy {
.type = SM_UPDATE_UNSPECIFIED, \
}
int parse_submodule_update_strategy(const char *value,
struct submodule_update_strategy *dst);
void submodule_update_strategy_release(struct submodule_update_strategy *strategy);
int is_gitmodules_unmerged(struct index_state *istate);
int is_writing_gitmodules_ok(void);
int is_staging_gitmodules_ok(struct index_state *istate);
@ -70,8 +74,6 @@ void die_in_unpopulated_submodule(struct index_state *istate,
void die_path_inside_submodule(struct index_state *istate,
const struct pathspec *ps);
enum submodule_update_type parse_submodule_update_type(const char *value);
int parse_submodule_update_strategy(const char *value,
struct submodule_update_strategy *dst);
const char *submodule_update_type_to_string(enum submodule_update_type type);
void handle_ignore_submodules_arg(struct diff_options *, const char *);
void show_submodule_diff_summary(struct diff_options *o, const char *path,

View File

@ -12,6 +12,7 @@ submodule and "git submodule update --rebase/--merge" does not detach the HEAD.
GIT_TEST_DEFAULT_INITIAL_BRANCH_NAME=main
export GIT_TEST_DEFAULT_INITIAL_BRANCH_NAME
TEST_PASSES_SANITIZE_LEAK=true
. ./test-lib.sh