Re: [PATCH v5 08/17] submodule--helper: fix "sm_path" and other "module_cb_list" leaks

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Ævar Arnfjörð Bjarmason <avarab@xxxxxxxxx> 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.

> 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@xxxxxxxxx>
> ---
>  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




[Index of Archives]     [Linux Kernel Development]     [Gcc Help]     [IETF Annouce]     [DCCP]     [Netdev]     [Networking]     [Security]     [V4L]     [Bugtraq]     [Yosemite]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Linux SCSI]     [Fedora Users]

  Powered by Linux