Re: [PATCH v5 08/17] submodule--helper: fix "sm_path" and other "module_cb_list" leaks
Ævar Arnfjörð Bjarmason <avarab@gmail.com> writes:
> Fix leaks in "struct module_cb_list" and the "struct module_cb" which
> it contains, these fixes leaks in e83e3333b57 (submodule: port
s/fixes/fix
The diff itself LGTM.
Show 65 quoted lines
> submodule subcommand 'summary' from shell to C, 2020-08-13).
>
> The "sm_path" should always have been a "char *", not a "const
> char *", we always create it with xstrdup().
>
> We can't mark any tests passing passing with SANITIZE=leak using
> "TEST_PASSES_SANITIZE_LEAK=true" as a result of this change, but
> "t7401-submodule-summary.sh" gets closer to passing as a result of
> this change.
>
> Signed-off-by: Ævar Arnfjörð Bjarmason <avarab@gmail.com>
> ---
> builtin/submodule--helper.c | 21 ++++++++++++++++++++-
> 1 file changed, 20 insertions(+), 1 deletion(-)
>
> diff --git a/builtin/submodule--helper.c b/builtin/submodule--helper.c
> index 68bf0f9178f..f332627d19e 100644
> --- a/builtin/submodule--helper.c
> +++ b/builtin/submodule--helper.c
> @@ -755,16 +755,34 @@ struct module_cb {
> struct object_id oid_src;
> struct object_id oid_dst;
> char status;
> - const char *sm_path;
> + char *sm_path;
> };
> #define MODULE_CB_INIT { 0 }
>
> +static void module_cb_release(struct module_cb *mcb)
> +{
> + free(mcb->sm_path);
> +}
> +
> struct module_cb_list {
> struct module_cb **entries;
> int alloc, nr;
> };
> #define MODULE_CB_LIST_INIT { 0 }
>
> +static void module_cb_list_release(struct module_cb_list *mcbl)
> +{
> + int i;
> +
> + for (i = 0; i < mcbl->nr; i++) {
> + struct module_cb *mcb = mcbl->entries[i];
> +
> + module_cb_release(mcb);
> + free(mcb);
> + }
> + free(mcbl->entries);
> +}
> +
> struct summary_cb {
> int argc;
> const char **argv;
> @@ -1108,6 +1126,7 @@ static int compute_summary_module_list(struct object_id *head_oid,
> cleanup:
> strvec_clear(&diff_args);
> release_revisions(&rev);
> + module_cb_list_release(&list);
> return ret;
> }
>
> --
> 2.37.1.1233.ge8b09efaedc