mirror of
https://github.com/yhirose/cpp-httplib.git
synced 2026-10-19 11:19:36 +00:00
Hash case-insensitive keys in a loop
case_ignore::hash recursed once per character of the key, and trailer field names from the wire reach it, so a long one could overflow the stack of a build that keeps the recursion (-O0). Hash in a loop instead, which gives the same values.
This commit is contained in:
1 parent
6acdc6255d
commit
82e28aa4f3
2 files changed
+16
-11
No files matched your search
@@ -643,6 +643,15 @@ TEST(FileExtensionTest, TakesTheAlphanumericSuffix) {
|
||||
EXPECT_EQ(long_ext, detail::file_extension("a." + long_ext));
|
||||
}
|
||||
|
||||
TEST(CaseIgnoreHashTest, IgnoresCaseAndTakesLongKeys) {
|
||||
detail::case_ignore::hash hash;
|
||||
EXPECT_EQ(hash("Content-Type"), hash("content-TYPE"));
|
||||
EXPECT_NE(hash("Content-Type"), hash("Content-Length"));
|
||||
|
||||
// Long enough to overflow the stack if hashed one call per character.
|
||||
EXPECT_EQ(hash(std::string(1 << 20, 'A')), hash(std::string(1 << 20, 'a')));
|
||||
}
|
||||
|
||||
TEST(FindContentTypeTest, ComparesWholeExtensions) {
|
||||
EXPECT_EQ("text/html", detail::find_content_type("/a.html", {}, ""));
|
||||
EXPECT_EQ("image/svg+xml", detail::find_content_type("/a.svg", {}, ""));
|
||||
|
||||
Reference in new issue
Block a user