From 78b2c1a273620b0afdd4e251b6feb0e10f6486b0 Mon Sep 17 00:00:00 2001 From: Veloman Yunkan Date: Sat, 7 Jan 2023 15:43:30 +0400 Subject: [PATCH] Testing of redirection to URLs with special symbols --- test/data/corner_cases.zim | Bin 2805 -> 35912 bytes test/data/corner_cases/wtf.html | 1 + test/data/corner_cases/wtf? | 1 + test/data/corner_cases/wtf?.html | 11 +++++++++++ test/server.cpp | 11 +++++++++++ 5 files changed, 24 insertions(+) create mode 120000 test/data/corner_cases/wtf.html create mode 120000 test/data/corner_cases/wtf? create mode 100644 test/data/corner_cases/wtf?.html diff --git a/test/data/corner_cases.zim b/test/data/corner_cases.zim index b13d0fe71b835f812de802782a26e686a8c8a733..024d34d92b8e8932e68632ca63584a054dc4e1ae 100644 GIT binary patch literal 35912 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 SvGyNt`GpHV*ZlFtkNzh%kXqRQ delta 613 zcmX>xgXycNSCpqO3mXF?gYudW*-jfaqoG*L~3=B*_oXQ0xfM5X!guV*p z2SB(C+(7z25Ip6Y=w-HXK?3_EMukZn?Df1X3_={TiUqE({`_D4P-Ds7SVv)|q@v}2 zM8pNoO-b>%K4ZbV|K|FvI*V4N8Ejv=KBvR=@-9{NH6lrY*0sGC8+%iAb91~b+nLo8 zeIA+kB)=_wnzVIk%VLA0o)J|yf5}Z{Dljs8^3-m%A{$eZvBSszANGIv|5N{mJO?ww zQf@(UhJ@1Ze2gMM*TJw4kR32Nx>MSL4ai~#Vvv_Off(c^kUw~Um=}l{ftZ1SEn;8*+5wkf0jh9G zEJ+21=;YomRcT~7kY=C6y!6thwqcQAw`rUR{IoBXFshZpF!2#_9- z8<{4@bxX1s06CL2yH)EA85r(BW9d7T76y3_2y~&e2b4~P(&bQkE|lI5r7u9~XHfbt nlop1@z73QH`x$6{H_$#%I5S+EFX!8A?0WH=mfLfs67DAe#QcOs 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? + + +

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) { {