checkout: fix leak of non-existent branch names
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> Signed-off-by: Junio C Hamano <gitster@pobox.com>
Jeff King committed
Aug 14, 2020 at 12:14 UTC
c514c62a4fd8b4c4a3e2cad68fb590fce2940dc3
1 file changed
+3
-1
builtin/checkout.c
+3
-1
index af849c644f..ef85fd48ad 100644
--- a/builtin/checkout.c
+++ b/builtin/checkout.c
@@ -1126,8 +1126,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) {