[PATCH 2/6] checkout: fix leak of non-existent branch names
- From
Jeff King <peff@peff.net>
- Date
- Aug 14, 2020, 16:14 UTC
- Message-ID
- <20200814161453.GB595698@coredump.intra.peff.net>
- In-Reply-To
- <20200814161328.GA153929@coredump.intra.peff.net>
We unconditionally write a branch name into a newly allocated buffer in new_branch_info->path, via setup_branch_path(). We then check to see if the branch exists; if not, we set that field to NULL, leaking the memory. We should take care to free() it when doing so.
Signed-off-by: Jeff King <peff@peff.net> --- builtin/checkout.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-)
diff --git a/builtin/checkout.c b/builtin/checkout.c index 2837195491..bba64108af 100644 --- a/builtin/checkout.c +++ b/builtin/checkout.c @@ -1120,8 +1120,10 @@ static void setup_new_branch_info_and_source_tree( if (!check_refname_format(new_branch_info->path, 0) && !read_ref(new_branch_info->path, &branch_rev)) oidcpy(rev, &branch_rev); - else + else { + free((char *)new_branch_info->path); new_branch_info->path = NULL; /* not an existing branch */ + } new_branch_info->commit = lookup_commit_reference_gently(the_repository, rev, 1); if (!new_branch_info->commit) {
-- 2.28.0.596.g9c08d63829