Commit 64fdd86d0e820479b414628051cf8e16c643dc8d

Carlos Martín Nieto 2014-11-08T20:21:14

remote: don't check for upstream on an anonymous remote If the remote is anonymous, then we cannot check for any configuration, as there is no name. Check for this before we try to use the name, which may be a NULL pointer. This fixes #2697.

diff --git a/src/remote.c b/src/remote.c
index c2c7159..ce35301 100644
--- a/src/remote.c
+++ b/src/remote.c
@@ -959,6 +959,7 @@ static int remote_head_for_ref(git_remote_head **out, git_remote *remote, git_re
 	}
 
 	if ((!git_reference__is_branch(ref_name)) ||
+	    !git_remote_name(remote) ||
 	    (error = git_branch_upstream_remote(&upstream_remote, repo, ref_name)) ||
 	    git__strcmp(git_remote_name(remote), git_buf_cstr(&upstream_remote)) ||
 	    (error = git_branch_upstream_name(&upstream_name, repo, ref_name)) < 0 ||
diff --git a/tests/network/remote/remotes.c b/tests/network/remote/remotes.c
index 2cdf922..c00929a 100644
--- a/tests/network/remote/remotes.c
+++ b/tests/network/remote/remotes.c
@@ -535,6 +535,16 @@ static int remote_single_branch(git_remote **out, git_repository *repo, const ch
 	return 0;
 }
 
+void test_network_remote_remotes__fetch_from_anonymous(void)
+{
+	git_remote *remote;
+
+	cl_git_pass(git_remote_create_anonymous(&remote, _repo, cl_fixture("testrepo.git"),
+						"refs/heads/*:refs/other/*"));
+	cl_git_pass(git_remote_fetch(remote, NULL, NULL, NULL));
+	git_remote_free(remote);
+}
+
 void test_network_remote_remotes__single_branch(void)
 {
 	git_clone_options opts = GIT_CLONE_OPTIONS_INIT;