]> git.ipfire.org Git - thirdparty/git.git/commitdiff
submodule--helper: fix a leak in module_add()
authorÆvar Arnfjörð Bjarmason <avarab@gmail.com>
Wed, 31 Aug 2022 23:14:20 +0000 (01:14 +0200)
committerJunio C Hamano <gitster@pobox.com>
Fri, 2 Sep 2022 16:18:13 +0000 (09:18 -0700)
Fix a leak in module_path(), since a6226fd772b (submodule--helper:
convert the bulk of cmd_add() to C, 2021-08-10), we've been freeing
add_data.sm_path, but in this case we clobbered it, and didn't free
the value we clobbered.

This makes test 28 of "t/t7400-submodule-basic.sh" ("submodule add in
subdirectory") pass when we're compiled with SANITIZE=leak..

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

index 6435508d28aef6b92afa86d7e6c9a79d84807e38..5c9a59083f7ba21918cc81be1870a9aeeeafee9d 100644 (file)
@@ -3314,8 +3314,12 @@ static int module_add(int argc, const char **argv, const char *prefix)
        else
                add_data.sm_path = xstrdup(argv[1]);
 
-       if (prefix && *prefix && !is_absolute_path(add_data.sm_path))
-               add_data.sm_path = xstrfmt("%s%s", prefix, add_data.sm_path);
+       if (prefix && *prefix && !is_absolute_path(add_data.sm_path)) {
+               char *sm_path = add_data.sm_path;
+
+               add_data.sm_path = xstrfmt("%s%s", prefix, sm_path);
+               free(sm_path);
+       }
 
        if (starts_with_dot_dot_slash(add_data.repo) ||
            starts_with_dot_slash(add_data.repo)) {