summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorHeiko Voigt <hvoigt@hvoigt.net>2019-04-26 15:59:49 +0200
committerHeiko Voigt <hvoigt@hvoigt.net>2019-05-03 13:38:26 +0200
commitd55bb479ddad2e8feaed7bf3e1773cf344db108c (patch)
tree6cc30bf9d17ad61e33aeea4c0412b60a44b3e3a2
parentaf95615faa87d3181fb5e8bc140c1aa6a8eda085 (diff)
downloadlibgit2-d55bb479ddad2e8feaed7bf3e1773cf344db108c.tar.gz
git_revwalk_push_range: do not crash if range is missing
If someone passes just one ref (i.e. "master") and misses passing the range we should be nice and return an error code instead of crashing.
-rw-r--r--src/revwalk.c6
-rw-r--r--tests/revwalk/basic.c9
2 files changed, 15 insertions, 0 deletions
diff --git a/src/revwalk.c b/src/revwalk.c
index 6d12d34eb..9428cc6c0 100644
--- a/src/revwalk.c
+++ b/src/revwalk.c
@@ -194,6 +194,12 @@ int git_revwalk_push_range(git_revwalk *walk, const char *range)
if ((error = git_revparse(&revspec, walk->repo, range)))
return error;
+ if (!revspec.to) {
+ git_error_set(GIT_ERROR_INVALID, "invalid revspec. Only range supported.");
+ error = GIT_EINVALIDSPEC;
+ goto out;
+ }
+
if (revspec.flags & GIT_REVPARSE_MERGE_BASE) {
/* TODO: support "<commit>...<commit>" */
git_error_set(GIT_ERROR_INVALID, "symmetric differences not implemented in revwalk");
diff --git a/tests/revwalk/basic.c b/tests/revwalk/basic.c
index 8e7302552..24dd6f875 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_no_range(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"));
+}
+
void test_revwalk_basic__push_mixed(void)
{
git_oid oid;