diff --git a/test/data/corner_cases.zim b/test/data/corner_cases.zim index b13d0fe71..024d34d92 100644 Binary files a/test/data/corner_cases.zim and b/test/data/corner_cases.zim differ diff --git a/test/data/corner_cases/wtf.html b/test/data/corner_cases/wtf.html new file mode 120000 index 000000000..2a9593de8 --- /dev/null +++ b/test/data/corner_cases/wtf.html @@ -0,0 +1 @@ +wtf?.html \ No newline at end of file diff --git a/test/data/corner_cases/wtf? b/test/data/corner_cases/wtf? new file mode 120000 index 000000000..2a9593de8 --- /dev/null +++ b/test/data/corner_cases/wtf? @@ -0,0 +1 @@ +wtf?.html \ No newline at end of file diff --git a/test/data/corner_cases/wtf?.html b/test/data/corner_cases/wtf?.html new file mode 100644 index 000000000..75b47246a --- /dev/null +++ b/test/data/corner_cases/wtf?.html @@ -0,0 +1,11 @@ + + +
+ +WTF? is an acronym coined by cryptography and security researcher Walter + Thomas Freiwald. It stands for "Will They Factorize?"
+ + diff --git a/test/server.cpp b/test/server.cpp index 129e8af33..d53978691 100644 --- a/test/server.cpp +++ b/test/server.cpp @@ -1196,6 +1196,17 @@ TEST_F(ServerTest, NonEndpointUrlsAreRedirectedToContentUrls) } } +TEST_F(ServerTest, RedirectionsToURLsWithSpecialSymbols) +{ + auto g = zfs1_->GET("/ROOT/content/corner_cases/wtf.html"); + ASSERT_EQ(302, g->status); + ASSERT_TRUE(g->has_header("Location")); + ASSERT_EQ(g->get_header_value("Location"), "/ROOT/content/corner_cases/wtf?.html"); + ASSERT_EQ(getCacheControlHeader(*g), "max-age=0, must-revalidate"); + ASSERT_FALSE(g->has_header("ETag")); +} + + TEST_F(ServerTest, BookMainPageIsRedirectedToArticleIndex) { {