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>
This commit is contained in:
Jeff King
2024-06-14 06:25:25 -04:00
committed by Junio C Hamano
parent d63586cb31
commit 0295ce7cbf

View File

@ -31,7 +31,7 @@ static int run_remote_archiver(int argc, const char **argv,
struct packet_reader reader; struct packet_reader reader;
_remote = remote_get(remote); _remote = remote_get(remote);
if (!_remote->url[0]) if (!_remote->url_nr)
die(_("git archive: Remote with no URL")); die(_("git archive: Remote with no URL"));
transport = transport_get(_remote, _remote->url[0]); transport = transport_get(_remote, _remote->url[0]);
transport_connect(transport, "git-upload-archive", exec, fd); transport_connect(transport, "git-upload-archive", exec, fd);