]> git.ipfire.org Git - thirdparty/git.git/commitdiff
submodule--helper: fix trivial leak in module_add()
authorÆvar Arnfjörð Bjarmason <avarab@gmail.com>
Fri, 4 Mar 2022 18:32:11 +0000 (19:32 +0100)
committerJunio C Hamano <gitster@pobox.com>
Fri, 4 Mar 2022 21:24:18 +0000 (13:24 -0800)
Fix a memory leak in code added in a6226fd772b (submodule--helper:
convert the bulk of cmd_add() to C, 2021-08-10). If "realrepo" isn't a
copy of the "repo" member we should free() it.

Signed-off-by: Ævar Arnfjörð Bjarmason <avarab@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
builtin/submodule--helper.c

index eeacefcc3835a737d60caf55d9ecab639b93f137..13b4841327d402d69639b5e5181650721aae76f7 100644 (file)
@@ -3309,6 +3309,7 @@ static int module_add(int argc, const char **argv, const char *prefix)
 {
        int force = 0, quiet = 0, progress = 0, dissociate = 0;
        struct add_data add_data = ADD_DATA_INIT;
+       char *to_free = NULL;
 
        struct option options[] = {
                OPT_STRING('b', "branch", &add_data.branch, N_("branch"),
@@ -3360,7 +3361,8 @@ static int module_add(int argc, const char **argv, const char *prefix)
                              "of the working tree"));
 
                /* dereference source url relative to parent's url */
-               add_data.realrepo = resolve_relative_url(add_data.repo, NULL, 1);
+               to_free = resolve_relative_url(add_data.repo, NULL, 1);
+               add_data.realrepo = to_free;
        } else if (is_dir_sep(add_data.repo[0]) || strchr(add_data.repo, ':')) {
                add_data.realrepo = add_data.repo;
        } else {
@@ -3413,6 +3415,7 @@ static int module_add(int argc, const char **argv, const char *prefix)
        }
        configure_added_submodule(&add_data);
        free(add_data.sm_path);
+       free(to_free);
 
        return 0;
 }