diff options
author | Edward Thomson <ethomson@github.com> | 2016-06-14 04:33:55 -1000 |
---|---|---|
committer | GitHub <noreply@github.com> | 2016-06-14 04:33:55 -1000 |
commit | 2a09de91a80425a8646f7764e333a5ac385c7a0f (patch) | |
tree | 88037b271b892f3aaac02b9571abcfa9063e9df8 | |
parent | 65e4ab7a333eeda6398fcbf3e663d1ca1c1e53ef (diff) | |
parent | 43c55111d9f313b4defd435335a50dda7933cf03 (diff) | |
download | libgit2-2a09de91a80425a8646f7764e333a5ac385c7a0f.tar.gz |
Merge pull request #3816 from pks-t/pks/memory-leaks
Memory leak fixes
-rw-r--r-- | src/global.c | 10 | ||||
-rw-r--r-- | src/transports/winhttp.c | 18 | ||||
-rw-r--r-- | tests/checkout/typechange.c | 4 |
3 files changed, 23 insertions, 9 deletions
diff --git a/src/global.c b/src/global.c index e1836ee0f..32e497507 100644 --- a/src/global.c +++ b/src/global.c @@ -87,11 +87,6 @@ static void shutdown_common(void) git__free(git__user_agent); git__free(git__ssl_ciphers); - -#if defined(GIT_MSVC_CRTDBG) - git_win32__crtdbg_stacktrace_cleanup(); - git_win32__stack_cleanup(); -#endif } /** @@ -183,6 +178,11 @@ int git_libgit2_shutdown(void) TlsFree(_tls_index); git_mutex_free(&git__mwindow_mutex); + +#if defined(GIT_MSVC_CRTDBG) + git_win32__crtdbg_stacktrace_cleanup(); + git_win32__stack_cleanup(); +#endif } /* Exit the lock */ 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; diff --git a/tests/checkout/typechange.c b/tests/checkout/typechange.c index 1efea931a..8a5110caa 100644 --- a/tests/checkout/typechange.c +++ b/tests/checkout/typechange.c @@ -240,8 +240,7 @@ static int make_submodule_dirty(git_submodule *sm, const char *name, void *paylo )); git_futils_rmdir_r(git_buf_cstr(&submodulepath), NULL, GIT_RMDIR_REMOVE_FILES); - /* initialize submodule and its repository */ - cl_git_pass(git_submodule_init(sm, 1)); + /* initialize submodule's repository */ cl_git_pass(git_submodule_repo_init(&submodule_repo, sm, 0)); /* create a file in the submodule workdir to make it dirty */ @@ -251,6 +250,7 @@ static int make_submodule_dirty(git_submodule *sm, const char *name, void *paylo git_buf_free(&dirtypath); git_buf_free(&submodulepath); + git_repository_free(submodule_repo); return 0; } |