srctree

Robin Linden parent 9460698a fb8e1042
url: Switch from string to string_view where possible

inlinesplit
url/url.cpp added: 10, removed: 8, total 2
@@ -1,5 +1,5 @@
// SPDX-FileCopyrightText: 2023 David Zero <zero-one@zer0-one.net>
// SPDX-FileCopyrightText: 2023 Robin Lindén <dev@robinlinden.eu>
// SPDX-FileCopyrightText: 2023-2024 Robin Lindén <dev@robinlinden.eu>
//
// SPDX-License-Identifier: BSD-2-Clause
 
@@ -38,13 +38,15 @@
#include <variant>
#include <vector>
 
using namespace std::literals;
 
namespace url {
// NOLINTBEGIN(misc-redundant-expression)
// NOLINTBEGIN(bugprone-unchecked-optional-access)
 
namespace {
// NOLINTNEXTLINE(cert-err58-cpp)
std::map<std::string, std::uint16_t> const special_schemes = {{"ftp", std::uint16_t{21}},
std::map<std::string_view, std::uint16_t> const special_schemes = {{"ftp", std::uint16_t{21}},
{"file", std::uint16_t{0}},
{"http", std::uint16_t{80}},
{"https", std::uint16_t{443}},
@@ -52,7 +54,7 @@ std::map<std::string, std::uint16_t> const special_schemes = {{"ftp", std::uint1
{"wss", std::uint16_t{443}}};
 
// NOLINTNEXTLINE(cert-err58-cpp)
std::map<ValidationError, std::string> const validation_error_str = {
std::map<ValidationError, std::string_view> const validation_error_str = {
{ValidationError::DomainToAscii, "Unicode ToASCII records an error or returns the empty string"},
{ValidationError::DomainToUnicode, "Unicode ToUnicode records an error"},
{ValidationError::DomainInvalidCodePoint, "The input's host contains a forbidden domain code point"},
@@ -1297,10 +1299,10 @@ std::optional<Host> UrlParser::parse_host(std::string_view input, bool is_not_sp
return std::nullopt;
}
 
std::string forbidden = "\t\n\r #/:<>?@[\\]^|";
static constexpr auto kForbidden = "\t\n\r #/:<>?@[\\]^|"sv;
 
for (std::size_t i = 0; i < ascii_domain->size(); i++) {
if (forbidden.find_first_of(ascii_domain.value()[i]) != std::string::npos || ascii_domain.value()[i] <= 0x1f
if (kForbidden.find_first_of(ascii_domain.value()[i]) != std::string::npos || ascii_domain.value()[i] <= 0x1f
|| ascii_domain.value()[i] == '%' || ascii_domain.value()[i] == 0x7f) {
validation_error(ValidationError::DomainInvalidCodePoint);
 
@@ -1646,10 +1648,10 @@ std::optional<std::array<std::uint16_t, 8>> UrlParser::parse_ipv6(std::string_vi
 
// https://url.spec.whatwg.org/#concept-opaque-host-parser
std::optional<std::string> UrlParser::parse_opaque_host(std::string_view input) const {
std::string forbidden = "\t\n\r #/:<>?@[\\]^|";
static constexpr auto kForbidden = "\t\n\r #/:<>?@[\\]^|\0"sv;
 
for (char i : input) {
if (forbidden.find_first_of(i) != std::string_view::npos || i == '\0') {
if (kForbidden.find_first_of(i) != std::string_view::npos) {
validation_error(ValidationError::HostInvalidCodePoint);
 
return std::nullopt;