promisor-remote: fix possible issue when no URL is advertised

In the 'KnownUrl' case, in should_accept_remote(), let's check that
`remote_url` is not NULL before we use strcmp() to compare it with
the local URL. This could avoid crashes if a server starts to not
advertise any URL in the future.

If `remote_url` is NULL, we should reject the URL. Let's also warn in
this case because we warn otherwise when a remote is rejected to try
to help diagnose things at the end of the function.

And while we are checking that remote_url is not NULL and warning if
it is, it makes sense to also help diagnose the case where remote_url
is empty.

Also while at it, let's spell "URL" with uppercase letters in all the
warnings.

Signed-off-by: Christian Couder <chriscool@tuxfamily.org>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
maint
Christian Couder 2025-03-18 12:00:07 +01:00 committed by Junio C Hamano
parent b059339bb3
commit caed258323
1 changed files with 6 additions and 1 deletions

View File

@ -409,10 +409,15 @@ static int should_accept_remote(enum accept_promisor accept,
if (accept != ACCEPT_KNOWN_URL)
BUG("Unhandled 'enum accept_promisor' value '%d'", accept);

if (!remote_url || !*remote_url) {
warning(_("no or empty URL advertised for remote '%s'"), remote_name);
return 0;
}

if (!strcmp(urls->v[i], remote_url))
return 1;

warning(_("known remote named '%s' but with url '%s' instead of '%s'"),
warning(_("known remote named '%s' but with URL '%s' instead of '%s'"),
remote_name, urls->v[i], remote_url);

return 0;