summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPatrick Steinhardt <ps@pks.im>2016-06-07 14:14:07 +0200
committerPatrick Steinhardt <ps@pks.im>2016-06-07 15:36:13 +0200
commit43c55111d9f313b4defd435335a50dda7933cf03 (patch)
tree5d5dc24522260a3620ba94034141b7278e3192c0
parent432af52b37a10aec278bb322c6805967cca5fc49 (diff)
downloadlibgit2-43c55111d9f313b4defd435335a50dda7933cf03.tar.gz
winhttp: plug several memory leaks
-rw-r--r--src/transports/winhttp.c18
1 files changed, 16 insertions, 2 deletions
diff --git a/src/transports/winhttp.c b/src/transports/winhttp.c
index 580c3b91b..78e42cf3b 100644
--- a/src/transports/winhttp.c
+++ b/src/transports/winhttp.c
@@ -400,11 +400,17 @@ static int winhttp_stream_connect(winhttp_stream *s)
return -1;
}
+ gitno_connection_data_free_ptrs(&t->proxy_connection_data);
+
if ((error = gitno_extract_url_parts(&t->proxy_connection_data.host, &t->proxy_connection_data.port, NULL,
&t->proxy_connection_data.user, &t->proxy_connection_data.pass, proxy_url, NULL)) < 0)
goto on_error;
if (t->proxy_connection_data.user && t->proxy_connection_data.pass) {
+ if (t->proxy_cred) {
+ t->proxy_cred->free(t->proxy_cred);
+ }
+
if ((error = git_cred_userpass_plaintext_new(&t->proxy_cred, t->proxy_connection_data.user, t->proxy_connection_data.pass)) < 0)
goto on_error;
}
@@ -425,10 +431,11 @@ static int winhttp_stream_connect(winhttp_stream *s)
}
/* Convert URL to wide characters */
- if ((error = git__utf8_to_16_alloc(&proxy_wide, processed_url.ptr)) < 0)
+ error = git__utf8_to_16_alloc(&proxy_wide, processed_url.ptr);
+ git_buf_free(&processed_url);
+ if (error < 0)
goto on_error;
-
proxy_info.dwAccessType = WINHTTP_ACCESS_TYPE_NAMED_PROXY;
proxy_info.lpszProxy = proxy_wide;
proxy_info.lpszProxyBypass = NULL;
@@ -1481,12 +1488,19 @@ static int winhttp_close(git_smart_subtransport *subtransport)
gitno_connection_data_free_ptrs(&t->connection_data);
memset(&t->connection_data, 0x0, sizeof(gitno_connection_data));
+ gitno_connection_data_free_ptrs(&t->proxy_connection_data);
+ memset(&t->proxy_connection_data, 0x0, sizeof(gitno_connection_data));
if (t->cred) {
t->cred->free(t->cred);
t->cred = NULL;
}
+ if (t->proxy_cred) {
+ t->proxy_cred->free(t->proxy_cred);
+ t->proxy_cred = NULL;
+ }
+
if (t->url_cred) {
t->url_cred->free(t->url_cred);
t->url_cred = NULL;