[PATCH 01/11] archive: fix check for missing url
- From
Jeff King <peff@peff.net>
- Date
- Jun 14, 2024, 10:25 UTC
- Message-ID
- <20240614102525.GA222445@coredump.intra.peff.net>
- In-Reply-To
- <20240614102439.GA222287@coredump.intra.peff.net>
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> --- This code actually goes away in patch 10, but it's possible we'd want to take a different approach there. So I preferred to fix this up front anyway.
builtin/archive.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
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);
-- 2.45.2.937.g0bcb3c087a