]> git.ipfire.org Git - thirdparty/git.git/commitdiff
worktree: fix resource leaks when branch creation fails
authorJohannes Schindelin <johannes.schindelin@gmx.de>
Sun, 5 Jul 2026 08:24:25 +0000 (08:24 +0000)
committerJunio C Hamano <gitster@pobox.com>
Sun, 5 Jul 2026 16:12:10 +0000 (09:12 -0700)
In the "add" subcommand, when `run_command()` fails while creating a new
branch (line 948), the function returns -1 immediately without freeing
the allocations made earlier: path (from prefix_filename at line 858),
opt_track, branch_to_free, and new_branch_to_free.

Redirect the error return through the existing cleanup block at the end
of the function so all four allocations are properly freed.

Pointed out by Coverity.

Assisted-by: Claude Opus 4.6
Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
builtin/worktree.c

index d21c43fde38b5e64a7ae1a3bbc4b5d81cb26244a..4bc7b4f6e7199a2869a0ab83a21a4ffebe49488a 100644 (file)
@@ -945,14 +945,17 @@ static int add(int ac, const char **av, const char *prefix,
                strvec_push(&cp.args, branch);
                if (opt_track)
                        strvec_push(&cp.args, opt_track);
-               if (run_command(&cp))
-                       return -1;
+               if (run_command(&cp)) {
+                       ret = -1;
+                       goto cleanup;
+               }
                branch = new_branch;
        } else if (opt_track) {
                die(_("--[no-]track can only be used if a new branch is created"));
        }
 
        ret = add_worktree(path, branch, &opts);
+cleanup:
        free(path);
        free(opt_track);
        free(branch_to_free);