summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorHeiko Voigt <hvoigt@hvoigt.net>2019-05-06 11:39:51 +0200
committerHeiko Voigt <hvoigt@hvoigt.net>2019-05-10 12:27:47 +0200
commit6990a4926161d668560968b8c75f9d7c3d180737 (patch)
treefca0050f9dcbb6fe76a0dc6d4d4a9720753d49b1
parentd55bb479ddad2e8feaed7bf3e1773cf344db108c (diff)
downloadlibgit2-6990a4926161d668560968b8c75f9d7c3d180737.tar.gz
revwalk: fix memory leak in error handling
This is not implemented and should fail, but it should also not leak. To allow the memory debugger to find leaks and fix this one we test this.
-rw-r--r--src/revwalk.c3
-rw-r--r--tests/revwalk/basic.c9
2 files changed, 11 insertions, 1 deletions
diff --git a/src/revwalk.c b/src/revwalk.c
index 9428cc6c0..7bb29110c 100644
--- a/src/revwalk.c
+++ b/src/revwalk.c
@@ -203,7 +203,8 @@ int git_revwalk_push_range(git_revwalk *walk, const char *range)
if (revspec.flags & GIT_REVPARSE_MERGE_BASE) {
/* TODO: support "<commit>...<commit>" */
git_error_set(GIT_ERROR_INVALID, "symmetric differences not implemented in revwalk");
- return GIT_EINVALIDSPEC;
+ error = GIT_EINVALIDSPEC;
+ goto out;
}
if ((error = push_commit(walk, git_object_id(revspec.from), 1, false)))
diff --git a/tests/revwalk/basic.c b/tests/revwalk/basic.c
index 24dd6f875..ee70ec635 100644
--- a/tests/revwalk/basic.c
+++ b/tests/revwalk/basic.c
@@ -400,6 +400,15 @@ void test_revwalk_basic__push_range(void)
cl_git_pass(test_walk_only(_walk, commit_sorting_segment, 2));
}
+void test_revwalk_basic__push_range_merge_base(void)
+{
+ revwalk_basic_setup_walk(NULL);
+
+ git_revwalk_reset(_walk);
+ git_revwalk_sorting(_walk, 0);
+ cl_git_fail_with(GIT_EINVALIDSPEC, git_revwalk_push_range(_walk, "HEAD...HEAD~2"));
+}
+
void test_revwalk_basic__push_range_no_range(void)
{
revwalk_basic_setup_walk(NULL);