]> git.ipfire.org Git - thirdparty/git.git/commitdiff
remote-curl.c: free memory in cmd_main()
authorÆvar Arnfjörð Bjarmason <avarab@gmail.com>
Fri, 4 Mar 2022 18:32:08 +0000 (19:32 +0100)
committerJunio C Hamano <gitster@pobox.com>
Fri, 4 Mar 2022 21:24:18 +0000 (13:24 -0800)
Plug a trivial memory leak in code added in a2d725b7bdf (Use an
external program to implement fetching with curl, 2009-08-05).

To do this have the cmd_main() use a "goto cleanup" pattern, and to
return an error of 1 unless we can fall through to the http_cleanup()
at the end.

Signed-off-by: Ævar Arnfjörð Bjarmason <avarab@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
remote-curl.c

index 0dabef2dd7c565f3f2c2ecd74a0ca295bd874afb..ff44f41011e8a046cdd4eaa86d4b59c6a513a559 100644 (file)
@@ -1472,11 +1472,12 @@ int cmd_main(int argc, const char **argv)
 {
        struct strbuf buf = STRBUF_INIT;
        int nongit;
+       int ret = 1;
 
        setup_git_directory_gently(&nongit);
        if (argc < 2) {
                error(_("remote-curl: usage: git remote-curl <remote> [<url>]"));
-               return 1;
+               goto cleanup;
        }
 
        options.verbosity = 1;
@@ -1508,7 +1509,7 @@ int cmd_main(int argc, const char **argv)
                if (strbuf_getline_lf(&buf, stdin) == EOF) {
                        if (ferror(stdin))
                                error(_("remote-curl: error reading command stream from git"));
-                       return 1;
+                       goto cleanup;
                }
                if (buf.len == 0)
                        break;
@@ -1556,12 +1557,15 @@ int cmd_main(int argc, const char **argv)
                                break;
                } else {
                        error(_("remote-curl: unknown command '%s' from git"), buf.buf);
-                       return 1;
+                       goto cleanup;
                }
                strbuf_reset(&buf);
        } while (1);
 
        http_cleanup();
+       ret = 0;
+cleanup:
+       strbuf_release(&buf);
 
-       return 0;
+       return ret;
 }