From d68da27a7f869cb3c66d0e0b52c5559f1ceb3d3b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Daniel=20Ekl=C3=B6f?= Date: Wed, 23 Oct 2024 08:47:21 +0200 Subject: [PATCH] uri: skip query/fragment parsing when dealing with file:// URIs Also, ignore invalid query/fragments (i.e. if the fragment comes before the query). Closes #1840 --- CHANGELOG.md | 4 ++++ uri.c | 15 +++++++++++++++ 2 files changed, 19 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index f949f1be..f2bd9442 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -85,9 +85,13 @@ * The `.desktop` files no longer use the reverse DNS naming scheme, and their names now match the default app-ids used by foot (`foot` and `footclient`) ([#1607][1607]). +* `file://` prefix are now stripped from OSC-8 URIs when + activated/opened, **if** the hostname matches the hostname of the + computer foot is running on ([#1840][1840]). [1822]: https://codeberg.org/dnkl/foot/issues/1822 [1607]: https://codeberg.org/dnkl/foot/issues/1607 +[1840]: https://codeberg.org/dnkl/foot/issues/1840 ### Deprecated diff --git a/uri.c b/uri.c index 4de4bd88..e09f7a97 100644 --- a/uri.c +++ b/uri.c @@ -144,6 +144,21 @@ uri_parse(const char *uri, size_t len, const char *query_start = memchr(start, '?', left); const char *fragment_start = memchr(start, '#', left); + if (streq(*scheme, "file")) { + /* Don't try to parse query/fragment in file URIs, just treat + the remaining text as path */ + query_start = NULL; + fragment_start = NULL; + } + + else if (query_start != NULL && fragment_start != NULL && + fragment_start < query_start) + { + /* Invalid URI - for now, ignore, and treat is as part of path */ + query_start = NULL; + fragment_start = NULL; + } + size_t path_len = query_start != NULL ? query_start - start : fragment_start != NULL ? fragment_start - start :