]> git.ipfire.org Git - thirdparty/git.git/commitdiff
bisect--helper: avoid use-after-free
authorTanushree Tumane <tanushreetumane@gmail.com>
Mon, 9 Dec 2019 10:56:47 +0000 (11:56 +0100)
committerJunio C Hamano <gitster@pobox.com>
Wed, 11 Dec 2019 17:24:27 +0000 (09:24 -0800)
In 5e82c3dd22a (bisect--helper: `bisect_reset` shell function in C,
2019-01-02), the `git bisect reset` subcommand was ported to C. When the
call to `git checkout` failed, an error message was reported to the
user.

However, this error message used the `strbuf` that had just been
released already. Let's switch that around: first use it, then release
it.

Mentored-by: Johannes Schindelin <Johannes.Schindelin@gmx.de>
Mentored-by: Christian Couder <chriscool@tuxfamily.org>
Signed-off-by: Tanushree Tumane <tanushreetumane@gmail.com>
Signed-off-by: Miriam Rubio <mirucam@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
builtin/bisect--helper.c

index e7325fe37f6148fd1ccd6fc5842bbc8f5022c306..c7b82231510d11191762e38d046bdcdeec486b79 100644 (file)
@@ -169,11 +169,12 @@ static int bisect_reset(const char *commit)
 
                argv_array_pushl(&argv, "checkout", branch.buf, "--", NULL);
                if (run_command_v_opt(argv.argv, RUN_GIT_CMD)) {
+                       error(_("could not check out original"
+                               " HEAD '%s'. Try 'git bisect"
+                               " reset <commit>'."), branch.buf);
                        strbuf_release(&branch);
                        argv_array_clear(&argv);
-                       return error(_("could not check out original"
-                                      " HEAD '%s'. Try 'git bisect"
-                                      " reset <commit>'."), branch.buf);
+                       return -1;
                }
                argv_array_clear(&argv);
        }