]> git.ipfire.org Git - thirdparty/git.git/commitdiff
bisect--helper: release strbuf and strvec on run error
authorRené Scharfe <l.s.r@web.de>
Tue, 18 Jan 2022 12:46:15 +0000 (13:46 +0100)
committerJunio C Hamano <gitster@pobox.com>
Wed, 19 Jan 2022 01:11:22 +0000 (17:11 -0800)
Move the cleanup code out of the loop and make sure all execution paths
pass through it to avoid leaking memory.

Signed-off-by: René Scharfe <l.s.r@web.de>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
builtin/bisect--helper.c

index 1dbc6294ef5b85c6a6c5edd3e1f889a85086a803..e529665d9fac4c562042378967db6e77082bdedf 100644 (file)
@@ -1116,8 +1116,7 @@ static int bisect_run(struct bisect_terms *terms, const char **argv, int argc)
                if (res < 0 || 128 <= res) {
                        error(_("bisect run failed: exit code %d from"
                                " '%s' is < 0 or >= 128"), res, command.buf);
-                       strbuf_release(&command);
-                       return res;
+                       break;
                }
 
                if (res == 125)
@@ -1129,8 +1128,10 @@ static int bisect_run(struct bisect_terms *terms, const char **argv, int argc)
 
                temporary_stdout_fd = open(git_path_bisect_run(), O_CREAT | O_WRONLY | O_TRUNC, 0666);
 
-               if (temporary_stdout_fd < 0)
-                       return error_errno(_("cannot open file '%s' for writing"), git_path_bisect_run());
+               if (temporary_stdout_fd < 0) {
+                       res = error_errno(_("cannot open file '%s' for writing"), git_path_bisect_run());
+                       break;
+               }
 
                fflush(stdout);
                saved_stdout = dup(1);
@@ -1159,11 +1160,12 @@ static int bisect_run(struct bisect_terms *terms, const char **argv, int argc)
                } else {
                        continue;
                }
-
-               strbuf_release(&command);
-               strvec_clear(&run_args);
-               return res;
+               break;
        }
+
+       strbuf_release(&command);
+       strvec_clear(&run_args);
+       return res;
 }
 
 int cmd_bisect__helper(int argc, const char **argv, const char *prefix)