Commit baf411e701abb5f89e175b24c2f61c45c9d5e59a

Etienne Samson 2019-02-02T19:00:45

refdb: ensure all mandatory functions are provided at setup time

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
diff --git a/src/refdb.c b/src/refdb.c
index e0c044f..fbbf519 100644
--- a/src/refdb.c
+++ b/src/refdb.c
@@ -68,6 +68,16 @@ int git_refdb_set_backend(git_refdb *db, git_refdb_backend *backend)
 {
 	GIT_ERROR_CHECK_VERSION(backend, GIT_REFDB_BACKEND_VERSION, "git_refdb_backend");
 
+	if (!backend->exists || !backend->lookup || !backend->iterator ||
+	    !backend->write || !backend->rename || !backend->del ||
+	    !backend->has_log || !backend->ensure_log || !backend->free ||
+	    !backend->reflog_read || !backend->reflog_write ||
+	    !backend->reflog_rename || !backend->reflog_delete ||
+	    (backend->lock && !backend->unlock)) {
+		git_error_set(GIT_ERROR_REFERENCE, "incomplete refdb backend implementation");
+		return GIT_EINVALID;
+	}
+
 	refdb_free_backend(db);
 	db->backend = backend;