diff options
author | Ævar Arnfjörð Bjarmason <avarab@gmail.com> | 2022-09-01 01:14:20 +0200 |
---|---|---|
committer | Junio C Hamano <gitster@pobox.com> | 2022-09-02 18:18:13 +0200 |
commit | 623bd7d154daf93e910414bfc8b3080c7269f2a6 (patch) | |
tree | fcb8744873b8c9a30c0c8d61ee76a42d26cec718 /builtin/submodule--helper.c | |
parent | submodule--helper: fix obscure leak in module_add() (diff) | |
download | git-623bd7d154daf93e910414bfc8b3080c7269f2a6.tar.xz git-623bd7d154daf93e910414bfc8b3080c7269f2a6.zip |
submodule--helper: fix a leak in module_add()
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>
Diffstat (limited to '')
-rw-r--r-- | builtin/submodule--helper.c | 8 |
1 files changed, 6 insertions, 2 deletions
diff --git a/builtin/submodule--helper.c b/builtin/submodule--helper.c index 6435508d28..5c9a59083f 100644 --- a/builtin/submodule--helper.c +++ b/builtin/submodule--helper.c @@ -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)) { |