aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJeff King <peff@peff.net>2024-06-14 06:25:25 -0400
committerJunio C Hamano <gitster@pobox.com>2024-06-14 09:34:37 -0700
commit0295ce7cbf0d2b3b71f44d9dc84ae8db1e895a99 (patch)
tree421467aa2159ab3ab776bd8ef9a94ee50294eff8
parentThe thirteenth batch (diff)
downloadgit-0295ce7cbf0d2b3b71f44d9dc84ae8db1e895a99.tar.gz
git-0295ce7cbf0d2b3b71f44d9dc84ae8db1e895a99.zip
archive: fix check for missing url
Running "git archive --remote" checks that we have at least one url for the remote. It does so by looking at remote.url[0], but that won't work; if we have no url at all, then remote.url will be NULL, and we'll segfault. Check url_nr instead, which is a more direct way of asking what we want. You can trigger the segfault like this: git -c remote.foo.vcs=bar archive --remote=foo but I didn't bother adding a test. This is the tip of the iceberg for no-url remotes, and a later patch will improve that situation. I just wanted to clean up this bug so it didn't make further refactoring of this code more confusing. Signed-off-by: Jeff King <peff@peff.net> Signed-off-by: Junio C Hamano <gitster@pobox.com>
-rw-r--r--builtin/archive.c2
1 files changed, 1 insertions, 1 deletions
diff --git a/builtin/archive.c b/builtin/archive.c
index 15ee1ec7bb..f35560042e 100644
--- a/builtin/archive.c
+++ b/builtin/archive.c
@@ -31,7 +31,7 @@ static int run_remote_archiver(int argc, const char **argv,
struct packet_reader reader;
_remote = remote_get(remote);
- if (!_remote->url[0])
+ if (!_remote->url_nr)
die(_("git archive: Remote with no URL"));
transport = transport_get(_remote, _remote->url[0]);
transport_connect(transport, "git-upload-archive", exec, fd);