Commit 6990a4926161d668560968b8c75f9d7c3d180737

Heiko Voigt 2019-05-06T11:39:51

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.

diff --git a/src/revwalk.c b/src/revwalk.c
index 9428cc6..7bb2911 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 24dd6f8..ee70ec6 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);