diff options
author | Mike Hommey <mh@glandium.org> | 2007-12-10 22:36:11 +0100 |
---|---|---|
committer | Junio C Hamano <gitster@pobox.com> | 2007-12-14 21:31:59 -0800 |
commit | 3a462bc9ba8cc46dcd5e49ae884968e1921c265f (patch) | |
tree | 5a770956fd8e645eae636496c5150918d4854c58 /http-push.c | |
parent | 028c2976389f70e7349bbfeeef0ed0a000d5e447 (diff) | |
download | git-3a462bc9ba8cc46dcd5e49ae884968e1921c265f.tar.gz git-3a462bc9ba8cc46dcd5e49ae884968e1921c265f.tar.xz |
Fix various memory leaks in http-push.c and http-walker.c
Signed-off-by: Mike Hommey <mh@glandium.org>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
Diffstat (limited to 'http-push.c')
-rw-r--r-- | http-push.c | 33 |
1 files changed, 20 insertions, 13 deletions
diff --git a/http-push.c b/http-push.c index 0257291b9..af00ea10b 100644 --- a/http-push.c +++ b/http-push.c @@ -1119,6 +1119,7 @@ int fetch_ref(char *ref, unsigned char *sha1) char *base = remote->url; struct active_request_slot *slot; struct slot_results results; + int ret; url = quote_ref_url(base, ref); slot = get_active_slot(); @@ -1129,19 +1130,23 @@ int fetch_ref(char *ref, unsigned char *sha1) curl_easy_setopt(slot->curl, CURLOPT_URL, url); if (start_active_slot(slot)) { run_active_slot(slot); - free(url); - if (results.curl_result != CURLE_OK) - return error("Couldn't get %s for %s\n%s", - url, ref, curl_errorstr); + if (results.curl_result == CURLE_OK) { + strbuf_rtrim(&buffer); + if (buffer.len == 40) + ret = get_sha1_hex(buffer.buf, sha1); + else + ret = 1; + } else { + ret = error("Couldn't get %s for %s\n%s", + url, ref, curl_errorstr); + } } else { - free(url); - return error("Unable to start request"); + ret = error("Unable to start request"); } - strbuf_rtrim(&buffer); - if (buffer.len != 40) - return 1; - return get_sha1_hex(buffer.buf, sha1); + strbuf_release(&buffer); + free(url); + return ret; } static void one_remote_object(const char *hex) @@ -2043,6 +2048,7 @@ static int remote_exists(const char *path) char *url = xmalloc(strlen(remote->url) + strlen(path) + 1); struct active_request_slot *slot; struct slot_results results; + int ret = -1; sprintf(url, "%s%s", remote->url, path); @@ -2055,9 +2061,9 @@ static int remote_exists(const char *path) run_active_slot(slot); free(url); if (results.http_code == 404) - return 0; + ret = 0; else if (results.curl_result == CURLE_OK) - return 1; + ret = 1; else fprintf(stderr, "HEAD HTTP error %ld\n", results.http_code); } else { @@ -2065,7 +2071,8 @@ static int remote_exists(const char *path) fprintf(stderr, "Unable to start HEAD request\n"); } - return -1; + free(url); + return ret; } static void fetch_symref(const char *path, char **symref, unsigned char *sha1) |