diff options
author | Carlos Martín Nieto <cmn@dwim.me> | 2015-05-13 16:12:45 +0200 |
---|---|---|
committer | Carlos Martín Nieto <cmn@dwim.me> | 2015-05-13 16:40:18 +0200 |
commit | 3e529e9d2dd2ae90d43612b9906f16c812101033 (patch) | |
tree | 8dd0b225773519d5e4fbdc035b5b2df4aa43cab3 | |
parent | d01737b419fd61010d2a0948d5d77fb0f214820a (diff) | |
download | libgit2-3e529e9d2dd2ae90d43612b9906f16c812101033.tar.gz |
Fix a few leaks
The interesting one is the notification macro, which was returning
directly on a soft-abort instead of going through the cleanup.
-rw-r--r-- | src/stash.c | 12 | ||||
-rw-r--r-- | tests/stash/apply.c | 2 | ||||
-rw-r--r-- | tests/submodule/modify.c | 1 |
3 files changed, 11 insertions, 4 deletions
diff --git a/src/stash.c b/src/stash.c index c79068edf..0c5cd1d2a 100644 --- a/src/stash.c +++ b/src/stash.c @@ -701,10 +701,14 @@ int git_stash_apply_init_options(git_stash_apply_options *opts, unsigned int ver return 0; } -#define NOTIFY_PROGRESS(opts, progress_type) \ - if ((opts).progress_cb && \ - (error = (opts).progress_cb((progress_type), (opts).progress_payload))) \ - return (error < 0) ? error : -1; +#define NOTIFY_PROGRESS(opts, progress_type) \ + do { \ + if ((opts).progress_cb && \ + (error = (opts).progress_cb((progress_type), (opts).progress_payload))) { \ + error = (error < 0) ? error : -1; \ + goto cleanup; \ + } \ + } while(false); int git_stash_apply( git_repository *repo, diff --git a/tests/stash/apply.c b/tests/stash/apply.c index 213945e9b..42186b6fb 100644 --- a/tests/stash/apply.c +++ b/tests/stash/apply.c @@ -44,6 +44,8 @@ void test_stash_apply__initialize(void) assert_status(repo, "how", GIT_STATUS_CURRENT); assert_status(repo, "who", GIT_STATUS_CURRENT); assert_status(repo, "when", GIT_ENOTFOUND); + + git_index_free(repo_index); } void test_stash_apply__cleanup(void) diff --git a/tests/submodule/modify.c b/tests/submodule/modify.c index 1ede56ec8..bbbb2d56e 100644 --- a/tests/submodule/modify.c +++ b/tests/submodule/modify.c @@ -257,4 +257,5 @@ void test_submodule_modify__save_last(void) cl_git_pass(git_submodule_lookup(&sm, g_repo, "sm_gitmodules_only")); cl_git_pass(git_submodule_save(sm)); + git_submodule_free(sm); } |