summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCarlos Martín Nieto <cmn@dwim.me>2014-11-08 20:21:14 +0100
committerCarlos Martín Nieto <cmn@dwim.me>2014-11-08 20:21:14 +0100
commit64fdd86d0e820479b414628051cf8e16c643dc8d (patch)
tree07c76d55ef41e732defeb7482907fa7a7b38d207
parente235db021267841ac39e2f539339d63d7e757672 (diff)
downloadlibgit2-64fdd86d0e820479b414628051cf8e16c643dc8d.tar.gz
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.
-rw-r--r--src/remote.c1
-rw-r--r--tests/network/remote/remotes.c10
2 files changed, 11 insertions, 0 deletions
diff --git a/src/remote.c b/src/remote.c
index c2c71592e..ce3530156 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 2cdf9226e..c00929a23 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;