forked from lix-project/lix
Merge pull request #7645 from typetetris/fix-url-parsing-file-as-application-scheme
Fix url parsing for urls using `file+`
This commit is contained in:
commit
7cd08ae379
|
@ -99,6 +99,27 @@ namespace nix {
|
||||||
ASSERT_EQ(parsed, expected);
|
ASSERT_EQ(parsed, expected);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
TEST(parseURL, parsesFilePlusHttpsUrl) {
|
||||||
|
auto s = "file+https://www.example.org/video.mp4";
|
||||||
|
auto parsed = parseURL(s);
|
||||||
|
|
||||||
|
ParsedURL expected {
|
||||||
|
.url = "file+https://www.example.org/video.mp4",
|
||||||
|
.base = "https://www.example.org/video.mp4",
|
||||||
|
.scheme = "file+https",
|
||||||
|
.authority = "www.example.org",
|
||||||
|
.path = "/video.mp4",
|
||||||
|
.query = (StringMap) { },
|
||||||
|
.fragment = "",
|
||||||
|
};
|
||||||
|
|
||||||
|
ASSERT_EQ(parsed, expected);
|
||||||
|
}
|
||||||
|
|
||||||
|
TEST(parseURL, rejectsAuthorityInUrlsWithFileTransportation) {
|
||||||
|
auto s = "file://www.example.org/video.mp4";
|
||||||
|
ASSERT_THROW(parseURL(s), Error);
|
||||||
|
}
|
||||||
|
|
||||||
TEST(parseURL, parseIPv4Address) {
|
TEST(parseURL, parseIPv4Address) {
|
||||||
auto s = "http://127.0.0.1:8080/file.tar.gz?download=fast&when=now#hello";
|
auto s = "http://127.0.0.1:8080/file.tar.gz?download=fast&when=now#hello";
|
||||||
|
|
|
@ -30,13 +30,13 @@ ParsedURL parseURL(const std::string & url)
|
||||||
auto & query = match[6];
|
auto & query = match[6];
|
||||||
auto & fragment = match[7];
|
auto & fragment = match[7];
|
||||||
|
|
||||||
auto isFile = scheme.find("file") != std::string::npos;
|
auto transportIsFile = parseUrlScheme(scheme).transport == "file";
|
||||||
|
|
||||||
if (authority && *authority != "" && isFile)
|
if (authority && *authority != "" && transportIsFile)
|
||||||
throw BadURL("file:// URL '%s' has unexpected authority '%s'",
|
throw BadURL("file:// URL '%s' has unexpected authority '%s'",
|
||||||
url, *authority);
|
url, *authority);
|
||||||
|
|
||||||
if (isFile && path.empty())
|
if (transportIsFile && path.empty())
|
||||||
path = "/";
|
path = "/";
|
||||||
|
|
||||||
return ParsedURL{
|
return ParsedURL{
|
||||||
|
|
Loading…
Reference in a new issue