Allow empty path segments in urls

Valid per https://datatracker.ietf.org/doc/html/rfc3986#section-3.3 (and
also somewhat frequently happening for local paths)
This commit is contained in:
Théophane Hufschmitt 2022-04-07 21:09:39 +02:00
parent 8b1e328d5d
commit f3d3587ab3
2 changed files with 3 additions and 3 deletions

View file

@ -178,7 +178,7 @@ namespace nix {
} }
TEST(parseURL, parseFileURLWithQueryAndFragment) { TEST(parseURL, parseFileURLWithQueryAndFragment) {
auto s = "file:///none/of/your/business"; auto s = "file:///none/of//your/business";
auto parsed = parseURL(s); auto parsed = parseURL(s);
ParsedURL expected { ParsedURL expected {
@ -186,7 +186,7 @@ namespace nix {
.base = "", .base = "",
.scheme = "file", .scheme = "file",
.authority = "", .authority = "",
.path = "/none/of/your/business", .path = "/none/of//your/business",
.query = (StringMap) { }, .query = (StringMap) { },
.fragment = "", .fragment = "",
}; };

View file

@ -18,7 +18,7 @@ const static std::string userRegex = "(?:(?:" + unreservedRegex + "|" + pctEncod
const static std::string authorityRegex = "(?:" + userRegex + "@)?" + hostRegex + "(?::[0-9]+)?"; const static std::string authorityRegex = "(?:" + userRegex + "@)?" + hostRegex + "(?::[0-9]+)?";
const static std::string pcharRegex = "(?:" + unreservedRegex + "|" + pctEncoded + "|" + subdelimsRegex + "|[:@])"; const static std::string pcharRegex = "(?:" + unreservedRegex + "|" + pctEncoded + "|" + subdelimsRegex + "|[:@])";
const static std::string queryRegex = "(?:" + pcharRegex + "|[/? \"])*"; const static std::string queryRegex = "(?:" + pcharRegex + "|[/? \"])*";
const static std::string segmentRegex = "(?:" + pcharRegex + "+)"; const static std::string segmentRegex = "(?:" + pcharRegex + "*)";
const static std::string absPathRegex = "(?:(?:/" + segmentRegex + ")*/?)"; const static std::string absPathRegex = "(?:(?:/" + segmentRegex + ")*/?)";
const static std::string pathRegex = "(?:" + segmentRegex + "(?:/" + segmentRegex + ")*/?)"; const static std::string pathRegex = "(?:" + segmentRegex + "(?:/" + segmentRegex + ")*/?)";