Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/mono/libgit2.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/refdb.c6
-rw-r--r--tests-clar/refs/iterator.c18
2 files changed, 23 insertions, 1 deletions
diff --git a/src/refdb.c b/src/refdb.c
index 73882e807..269234bfa 100644
--- a/src/refdb.c
+++ b/src/refdb.c
@@ -128,7 +128,11 @@ int git_refdb_iterator(git_reference_iterator **out, git_refdb *db)
{
git_reference_iterator *iter;
- /* FIXME: don't segfault when there is no backends */
+ if (!db->backend || !db->backend->iterator) {
+ giterr_set(GITERR_REFERENCE, "This backend doesn't support iterators");
+ return -1;
+ }
+
if (db->backend->iterator(&iter, db->backend) < 0) {
git__free(iter);
return -1;
diff --git a/tests-clar/refs/iterator.c b/tests-clar/refs/iterator.c
index aef0453c8..d5555c657 100644
--- a/tests-clar/refs/iterator.c
+++ b/tests-clar/refs/iterator.c
@@ -74,3 +74,21 @@ void test_refs_iterator__list(void)
}
git_vector_free(&output);
}
+
+void test_refs_iterator__empty(void)
+{
+ git_reference_iterator *iter;
+ git_odb *odb;
+ const char *name;
+ git_repository *empty;
+
+ cl_git_pass(git_odb_new(&odb));
+ cl_git_pass(git_repository_wrap_odb(&empty, odb));
+
+ cl_git_pass(git_reference_iterator_new(&iter, empty));
+ cl_assert_equal_i(GIT_ITEROVER, git_reference_next(&name, iter));
+
+ git_reference_iterator_free(iter);
+ git_odb_free(odb);
+ git_repository_free(empty);
+}