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
This commit is contained in:
Daniel Eklöf 2024-10-23 08:47:21 +02:00
parent 996e5fa630
commit d68da27a7f
No known key found for this signature in database
GPG key ID: 5BBD4992C116573F
2 changed files with 19 additions and 0 deletions

15
uri.c
View file

@ -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 :