From 8c2528748d6e0671a61ce729318a9f4e44f51111 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Carlos=20Mart=C3=ADn=20Nieto?= Date: Thu, 6 Oct 2011 00:51:32 +0200 Subject: [PATCH] net: plug a few memory leaks MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Carlos Martín Nieto --- src/transport-http.c | 16 ++++++++++++++-- src/transport_git.c | 3 +++ 2 files changed, 17 insertions(+), 2 deletions(-) diff --git a/src/transport-http.c b/src/transport-http.c index 13a95dbc5..3426b34e1 100644 --- a/src/transport-http.c +++ b/src/transport-http.c @@ -389,15 +389,20 @@ static int on_body_parse_response(http_parser *parser, const char *str, size_t l git_buf_consume(buf, line_end); if (pkt->type == GIT_PKT_PACK) { + free(pkt); t->pack_ready = 1; return 0; } - if (pkt->type == GIT_PKT_NAK) + if (pkt->type == GIT_PKT_NAK) { + free(pkt); return 0; + } - if (pkt->type != GIT_PKT_ACK) + if (pkt->type != GIT_PKT_ACK) { + free(pkt); continue; + } error = git_vector_insert(common, pkt); if (error < GIT_SUCCESS) @@ -596,6 +601,8 @@ static int http_negotiate_fetch(git_transport *transport, git_repository *repo, } while(1); cleanup: + git_buf_free(&request); + git_buf_free(&data); git_revwalk_free(walk); return error; } @@ -722,6 +729,7 @@ static void http_free(git_transport *transport) { transport_http *t = (transport_http *) transport; git_vector *refs = &t->refs; + git_vector *common = &t->common; unsigned int i; git_pkt *p; @@ -737,6 +745,10 @@ static void http_free(git_transport *transport) git_pkt_free(p); } git_vector_free(refs); + git_vector_foreach(common, i, p) { + git_pkt_free(p); + } + git_vector_free(common); git_buf_free(&t->buf); free(t->heads); free(t->content_type); diff --git a/src/transport_git.c b/src/transport_git.c index 7b65936a5..489807851 100644 --- a/src/transport_git.c +++ b/src/transport_git.c @@ -357,9 +357,11 @@ static int git_negotiate_fetch(git_transport *transport, git_repository *repo, g gitno_consume(buf, line_end); if (pkt->type == GIT_PKT_ACK) { + free(pkt); error = GIT_SUCCESS; goto done; } else if (pkt->type == GIT_PKT_NAK) { + free(pkt); break; } else { error = git__throw(GIT_ERROR, "Got unexpected pkt type"); @@ -422,6 +424,7 @@ static int git_download_pack(char **out, git_transport *transport, git_repositor return error; if (pkt->type == GIT_PKT_PACK) { + free(pkt); return git_fetch__download_pack(out, buf->data, buf->offset, t->socket, repo); }