url-mode: don't strip the file:// prefix from localhost URIs

Before this patch, the file://<host> prefix was stripped from URIs,
when the hostname matched the current host (that is, for "local"
URLs).

Unfortunately, the way this was done caused other parts of the URI to
be stripped as well. For example, the 'query' and 'fragment' parts.

This patch simply removes all special casing of file:// URIs.

Since the URL is passed to a generic opener (i.e. we don't have a
special opener application for file:// URIs), the opener helper must
handle the file:// prefix anyway.

Closes #1474
This commit is contained in:
Daniel Eklöf 2023-09-20 15:29:35 +02:00
parent b2963bbf80
commit 54722369d8
No known key found for this signature in database
GPG key ID: 5BBD4992C116573F
2 changed files with 5 additions and 31 deletions

View file

@ -128,46 +128,17 @@ static void
activate_url(struct seat *seat, struct terminal *term, const struct url *url,
uint32_t serial)
{
char *url_string = NULL;
char *scheme, *host, *path;
if (uri_parse(url->url, strlen(url->url), &scheme, NULL, NULL,
&host, NULL, &path, NULL, NULL))
{
if (strcmp(scheme, "file") == 0 && hostname_is_localhost(host)) {
/*
* This is a file in *this* computer. Pass only the
* filename to the URL-launcher.
*
* I.e. strip the file://user@host/ prefix.
*/
url_string = path;
} else
free(path);
free(scheme);
free(host);
}
if (url_string == NULL)
url_string = xstrdup(url->url);
switch (url->action) {
case URL_ACTION_COPY:
if (text_to_clipboard(seat, term, url_string, seat->kbd.serial)) {
/* Now owned by our clipboard “manager” */
url_string = NULL;
}
text_to_clipboard(seat, term, xstrdup(url->url), seat->kbd.serial);
break;
case URL_ACTION_LAUNCH:
case URL_ACTION_PERSISTENT: {
spawn_url_launcher(seat, term, url_string, serial);
spawn_url_launcher(seat, term, url->url, serial);
break;
}
}
free(url_string);
}
void