summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEdward Thomson <ethomson@edwardthomson.com>2017-10-07 12:55:16 +0100
committerGitHub <noreply@github.com>2017-10-07 12:55:16 +0100
commit21e6a11a55fc2ca0f7385ef2f43cd75090a10d5f (patch)
tree15a0f62aca7162ff88b72e0d23d90507b8571df1
parent58deac7758296f115bcbc3a7bbcfcae3eda07f0a (diff)
parent25fdb3f0c431b87a286537f193c64b1cdae107bc (diff)
downloadlibgit2-21e6a11a55fc2ca0f7385ef2f43cd75090a10d5f.tar.gz
Merge pull request #4359 from libgit2/cmn/proxy-options-free
Plug some leaks in curl's proxy handling
-rw-r--r--src/curl_stream.c3
-rw-r--r--src/proxy.c6
-rw-r--r--src/proxy.h1
3 files changed, 10 insertions, 0 deletions
diff --git a/src/curl_stream.c b/src/curl_stream.c
index 24bf62635..a895cb8bd 100644
--- a/src/curl_stream.c
+++ b/src/curl_stream.c
@@ -195,6 +195,7 @@ static int curls_set_proxy(git_stream *stream, const git_proxy_options *proxy_op
CURLcode res;
curl_stream *s = (curl_stream *) stream;
+ git_proxy_options_clear(&s->proxy);
if ((error = git_proxy_options_dup(&s->proxy, proxy_opts)) < 0)
return error;
@@ -295,6 +296,8 @@ static void curls_free(git_stream *stream)
curls_close(stream);
git_strarray_free(&s->cert_info_strings);
+ git_proxy_options_clear(&s->proxy);
+ git_cred_free(s->proxy_cred);
git__free(s);
}
diff --git a/src/proxy.c b/src/proxy.c
index b07371d48..9bc2c7fb1 100644
--- a/src/proxy.c
+++ b/src/proxy.c
@@ -31,3 +31,9 @@ int git_proxy_options_dup(git_proxy_options *tgt, const git_proxy_options *src)
return 0;
}
+
+void git_proxy_options_clear(git_proxy_options *opts)
+{
+ git__free((char *) opts->url);
+ opts->url = NULL;
+}
diff --git a/src/proxy.h b/src/proxy.h
index 7582301c9..f8b5c4b50 100644
--- a/src/proxy.h
+++ b/src/proxy.h
@@ -12,5 +12,6 @@
#include "git2/proxy.h"
extern int git_proxy_options_dup(git_proxy_options *tgt, const git_proxy_options *src);
+extern void git_proxy_options_clear(git_proxy_options *opts);
#endif