From 8eb527389e204b75888ff467e41c46044e0c0ab9 Mon Sep 17 00:00:00 2001 From: Veloman Yunkan Date: Sat, 7 Jan 2023 15:45:33 +0400 Subject: [PATCH] URI-encoding of redirections to URLs with special symbols --- src/server/internalServer.cpp | 2 +- test/server.cpp | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/server/internalServer.cpp b/src/server/internalServer.cpp index dd4c766b5..0edb367fc 100644 --- a/src/server/internalServer.cpp +++ b/src/server/internalServer.cpp @@ -1030,7 +1030,7 @@ ParameterizedMessage suggestSearchMsg(const std::string& searchURL, const std::s std::unique_ptr InternalServer::build_redirect(const std::string& bookName, const zim::Item& item) const { - const auto path = kiwix::urlEncode(item.getPath()); + const auto path = kiwix::urlEncode(item.getPath(), true); const auto redirectUrl = m_root + "/content/" + bookName + "/" + path; return Response::build_redirect(*this, redirectUrl); } diff --git a/test/server.cpp b/test/server.cpp index d53978691..9d955bc2a 100644 --- a/test/server.cpp +++ b/test/server.cpp @@ -1145,7 +1145,7 @@ TEST_F(ServerTest, RandomPageRedirectsToAnExistingArticle) auto g = zfs1_->GET("/ROOT/random?content=zimfile"); ASSERT_EQ(302, g->status); ASSERT_TRUE(g->has_header("Location")); - ASSERT_TRUE(kiwix::startsWith(g->get_header_value("Location"), "/ROOT/content/zimfile/A/")); + ASSERT_TRUE(kiwix::startsWith(g->get_header_value("Location"), "/ROOT/content/zimfile/A%2F")); ASSERT_EQ(getCacheControlHeader(*g), "max-age=0, must-revalidate"); ASSERT_FALSE(g->has_header("ETag")); } @@ -1201,7 +1201,7 @@ 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(g->get_header_value("Location"), "/ROOT/content/corner_cases/wtf%3F.html"); ASSERT_EQ(getCacheControlHeader(*g), "max-age=0, must-revalidate"); ASSERT_FALSE(g->has_header("ETag")); } @@ -1213,7 +1213,7 @@ TEST_F(ServerTest, BookMainPageIsRedirectedToArticleIndex) auto g = zfs1_->GET("/ROOT/content/zimfile"); ASSERT_EQ(302, g->status); ASSERT_TRUE(g->has_header("Location")); - ASSERT_EQ("/ROOT/content/zimfile/A/index", g->get_header_value("Location")); + ASSERT_EQ("/ROOT/content/zimfile/A%2Findex", g->get_header_value("Location")); } }