Commit e499b13cb0dc0c47a1ed31ed568f3a226c4bc42f

Stefan Huber 2016-08-24T01:20:39

git_checkout_tree options fix According to the reference the git_checkout_tree and git_checkout_head functions should accept NULL in the opts field This was broken since the opts field was dereferenced and thus lead to a crash.

diff --git a/src/checkout.c b/src/checkout.c
index c6d91a9..1bea00d 100644
--- a/src/checkout.c
+++ b/src/checkout.c
@@ -2699,7 +2699,7 @@ int git_checkout_tree(
 	if ((error = git_repository_index(&index, repo)) < 0)
 		return error;
 
-	if ((opts->checkout_strategy & GIT_CHECKOUT_DISABLE_PATHSPEC_MATCH)) {
+	if (opts && (opts->checkout_strategy & GIT_CHECKOUT_DISABLE_PATHSPEC_MATCH)) {
 		iter_opts.pathlist.count = opts->paths.count;
 		iter_opts.pathlist.strings = opts->paths.strings;
 	}
diff --git a/tests/checkout/tree.c b/tests/checkout/tree.c
index 7df4d7e..4a0314a 100644
--- a/tests/checkout/tree.c
+++ b/tests/checkout/tree.c
@@ -1479,3 +1479,7 @@ void test_checkout_tree__baseline_is_empty_when_no_index(void)
 	git_reference_free(head);
 }
 
+void test_checkout_tree__nullopts(void)
+{
+	cl_git_pass(git_checkout_tree(g_repo, NULL, NULL));
+}