aboutsummaryrefslogtreecommitdiff
path: root/zenserver/cache/structuredcache.cpp
diff options
context:
space:
mode:
authorStefan Boberg <[email protected]>2022-06-10 15:59:08 +0200
committerGitHub <[email protected]>2022-06-10 15:59:08 +0200
commit4e50d60d64249e3d0b5514937261d1aa2207861d (patch)
tree1bfb8625e0f1c6e977bd0122317771207ec6bcd2 /zenserver/cache/structuredcache.cpp
parentextended zen print command to also handle CbPackage and CompressedBuffer form... (diff)
downloadzen-4e50d60d64249e3d0b5514937261d1aa2207861d.tar.xz
zen-4e50d60d64249e3d0b5514937261d1aa2207861d.zip
namespace/bucket validation now uses AsciiSet for more efficient validation (#127)
Diffstat (limited to 'zenserver/cache/structuredcache.cpp')
-rw-r--r--zenserver/cache/structuredcache.cpp12
1 files changed, 7 insertions, 5 deletions
diff --git a/zenserver/cache/structuredcache.cpp b/zenserver/cache/structuredcache.cpp
index 07866d4f0..45bbe062b 100644
--- a/zenserver/cache/structuredcache.cpp
+++ b/zenserver/cache/structuredcache.cpp
@@ -77,7 +77,7 @@ struct PutRequestData
};
namespace {
- static constexpr std::string_view HttpZCacheRPCPrefix = "$rpc"sv;
+ static constinit std::string_view HttpZCacheRPCPrefix = "$rpc"sv;
struct HttpRequestData
{
@@ -87,8 +87,8 @@ namespace {
std::optional<IoHash> ValueContentId;
};
- const char* ValidNamespaceNameCharacters = "abcdefghijklmnopqrstuvwxyz0123456789-_.ABCDEFGHIJKLMNOPQRSTUVWXYZ";
- const char* ValidBucketNameCharacters = "abcdefghijklmnopqrstuvwxyz0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";
+ constinit AsciiSet ValidNamespaceNameCharactersSet{"abcdefghijklmnopqrstuvwxyz0123456789-_.ABCDEFGHIJKLMNOPQRSTUVWXYZ"};
+ constinit AsciiSet ValidBucketNameCharactersSet{"abcdefghijklmnopqrstuvwxyz0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"};
std::optional<std::string> GetValidNamespaceName(std::string_view Name)
{
@@ -104,7 +104,7 @@ namespace {
return {};
}
- if (Name.find_first_not_of(ValidNamespaceNameCharacters) != std::string::npos)
+ if (!AsciiSet::HasOnly(Name, ValidNamespaceNameCharactersSet))
{
ZEN_WARN("Namespace '{}' is invalid, invalid characters detected", Name);
return {};
@@ -120,11 +120,13 @@ namespace {
ZEN_WARN("Bucket name is invalid, empty bucket name is not allowed");
return {};
}
- if (Name.find_first_not_of(ValidBucketNameCharacters) != std::string::npos)
+
+ if (!AsciiSet::HasOnly(Name, ValidBucketNameCharactersSet))
{
ZEN_WARN("Bucket name '{}' is invalid, invalid characters detected", Name);
return {};
}
+
return ToLower(Name);
}