Commit de999f260ffdf0266bc0109cd71621ecf65cad98

Edward Thomson 2015-11-13T15:36:45

checkout::crlf test: don't crash when no idx entry When there's no matching index entry (for whatever reason), don't try to dereference the null return value to get at the id. Otherwise when we break something in the index API, the checkout test crashes for confusing reasons and causes us to step through it in a debugger thinking that we had broken much more than we actually did.

diff --git a/tests/checkout/crlf.c b/tests/checkout/crlf.c
index 8e77d08..347c221 100644
--- a/tests/checkout/crlf.c
+++ b/tests/checkout/crlf.c
@@ -278,6 +278,7 @@ void test_checkout_crlf__autocrlf_true_index_size_is_filtered_size(void)
 void test_checkout_crlf__with_ident(void)
 {
 	git_index *index;
+	git_index_entry *entry;
 	git_blob *blob;
 	git_checkout_options opts = GIT_CHECKOUT_OPTIONS_INIT;
 	opts.checkout_strategy = GIT_CHECKOUT_FORCE;
@@ -310,14 +311,14 @@ void test_checkout_crlf__with_ident(void)
 
 	/* check that blobs have $Id$ */
 
-	cl_git_pass(git_blob_lookup(&blob, g_repo,
-		& git_index_get_bypath(index, "lf.ident", 0)->id));
+	cl_assert((entry = git_index_get_bypath(index, "lf.ident", 0)));
+	cl_git_pass(git_blob_lookup(&blob, g_repo, &entry->id));
 	cl_assert_equal_s(
 		ALL_LF_TEXT_RAW "\n$Id$\n", git_blob_rawcontent(blob));
 	git_blob_free(blob);
 
-	cl_git_pass(git_blob_lookup(&blob, g_repo,
-		& git_index_get_bypath(index, "more2.identcrlf", 0)->id));
+	cl_assert((entry = git_index_get_bypath(index, "more2.identcrlf", 0)));
+	cl_git_pass(git_blob_lookup(&blob, g_repo, &entry->id));
 	cl_assert_equal_s(
 		"\n$Id$\n" MORE_CRLF_TEXT_AS_LF, git_blob_rawcontent(blob));
 	git_blob_free(blob);