diff --git a/src/libflake/flakeref.cc b/src/libflake/flakeref.cc index 5b1c3e8b2..a562e29d2 100644 --- a/src/libflake/flakeref.cc +++ b/src/libflake/flakeref.cc @@ -82,7 +82,7 @@ std::pair parsePathFlakeRefWithFragment( auto succeeds = std::regex_match(url, match, pathFlakeRegex); assert(succeeds); auto path = match[1].str(); - auto query = decodeQuery(match[3]); + auto query = decodeQuery(match[3].str()); auto fragment = percentDecode(match[5].str()); if (baseDir) { diff --git a/src/libutil/url.cc b/src/libutil/url.cc index cdfba8a83..07f4b29ea 100644 --- a/src/libutil/url.cc +++ b/src/libutil/url.cc @@ -179,7 +179,7 @@ try { .scheme = scheme, .authority = authority, .path = path, - .query = decodeQuery(std::string(query)), + .query = decodeQuery(query), .fragment = fragment, }; } catch (boost::system::system_error & e) { @@ -201,7 +201,7 @@ std::string percentEncode(std::string_view s, std::string_view keep) s, [keep](char c) { return boost::urls::unreserved_chars(c) || keep.find(c) != keep.npos; }); } -StringMap decodeQuery(const std::string & query) +StringMap decodeQuery(std::string_view query) try { /* For back-compat unescaped characters are allowed. */ auto fixedEncodedQuery = percentEncodeCharSet(query, extraAllowedCharsInQuery);