mirror of https://github.com/kiwix/libkiwix.git
/ is no longer a reserved char for urlEncode()
This change is a quick hack solving known issues with URI-encoding in libkiwix. This change removes the slash character from the list of URL separator symbols in URL encoding/decoding utilities, and makes it a symbol that is safe to leave unencoded. Effects: - `urlEncode()` never encodes the '/' symbol (even when it is requested to encode the URL separator symbols too). - `urlDecode(str)`/`urlDecode(..., false)` will now decode %2F to '/'; other encoded URL separator symbols are NOT decoded when the second argument of `urlDecode()` is set to false (which is the default).
This commit is contained in:
parent
c5ccbd37e2
commit
239b108fa7
|
@ -172,7 +172,6 @@ bool isReservedUrlChar(char c)
|
||||||
switch (c) {
|
switch (c) {
|
||||||
case ';':
|
case ';':
|
||||||
case ',':
|
case ',':
|
||||||
case '/':
|
|
||||||
case '?':
|
case '?':
|
||||||
case ':':
|
case ':':
|
||||||
case '@':
|
case '@':
|
||||||
|
@ -206,6 +205,7 @@ bool isHarmlessUriChar(char c)
|
||||||
case '\'':
|
case '\'':
|
||||||
case '(':
|
case '(':
|
||||||
case ')':
|
case ')':
|
||||||
|
case '/':
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
|
|
|
@ -1156,7 +1156,7 @@ TEST_F(ServerTest, RandomPageRedirectsToAnExistingArticle)
|
||||||
auto g = zfs1_->GET("/ROOT/random?content=zimfile");
|
auto g = zfs1_->GET("/ROOT/random?content=zimfile");
|
||||||
ASSERT_EQ(302, g->status);
|
ASSERT_EQ(302, g->status);
|
||||||
ASSERT_TRUE(g->has_header("Location"));
|
ASSERT_TRUE(g->has_header("Location"));
|
||||||
ASSERT_TRUE(kiwix::startsWith(g->get_header_value("Location"), "/ROOT/content/zimfile/A%2F"));
|
ASSERT_TRUE(kiwix::startsWith(g->get_header_value("Location"), "/ROOT/content/zimfile/A/"));
|
||||||
ASSERT_EQ(getCacheControlHeader(*g), "max-age=0, must-revalidate");
|
ASSERT_EQ(getCacheControlHeader(*g), "max-age=0, must-revalidate");
|
||||||
ASSERT_FALSE(g->has_header("ETag"));
|
ASSERT_FALSE(g->has_header("ETag"));
|
||||||
}
|
}
|
||||||
|
@ -1224,7 +1224,7 @@ TEST_F(ServerTest, BookMainPageIsRedirectedToArticleIndex)
|
||||||
auto g = zfs1_->GET("/ROOT/content/zimfile");
|
auto g = zfs1_->GET("/ROOT/content/zimfile");
|
||||||
ASSERT_EQ(302, g->status);
|
ASSERT_EQ(302, g->status);
|
||||||
ASSERT_TRUE(g->has_header("Location"));
|
ASSERT_TRUE(g->has_header("Location"));
|
||||||
ASSERT_EQ("/ROOT/content/zimfile/A%2Findex", g->get_header_value("Location"));
|
ASSERT_EQ("/ROOT/content/zimfile/A/index", g->get_header_value("Location"));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -110,8 +110,8 @@ namespace URLEncoding
|
||||||
|
|
||||||
const char letters[] = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";
|
const char letters[] = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";
|
||||||
const char digits[] = "0123456789";
|
const char digits[] = "0123456789";
|
||||||
const char nonEncodableSymbols[] = ".-_~()*!";
|
const char nonEncodableSymbols[] = ".-_~()*!/";
|
||||||
const char uriDelimSymbols[] = ":/@?=+&#$;,";
|
const char uriDelimSymbols[] = ":@?=+&#$;,";
|
||||||
|
|
||||||
const char otherSymbols[] = R"(`%^[]{}\|"<>)";
|
const char otherSymbols[] = R"(`%^[]{}\|"<>)";
|
||||||
|
|
||||||
|
@ -135,7 +135,7 @@ TEST(stringTools, urlEncode)
|
||||||
EXPECT_EQ(urlEncode(nonEncodableSymbols, true), nonEncodableSymbols);
|
EXPECT_EQ(urlEncode(nonEncodableSymbols, true), nonEncodableSymbols);
|
||||||
|
|
||||||
EXPECT_EQ(urlEncode(uriDelimSymbols), uriDelimSymbols);
|
EXPECT_EQ(urlEncode(uriDelimSymbols), uriDelimSymbols);
|
||||||
EXPECT_EQ(urlEncode(uriDelimSymbols, true), "%3A%2F%40%3F%3D%2B%26%23%24%3B%2C");
|
EXPECT_EQ(urlEncode(uriDelimSymbols, true), "%3A%40%3F%3D%2B%26%23%24%3B%2C");
|
||||||
|
|
||||||
EXPECT_EQ(urlEncode(otherSymbols), "%60%25%5E%5B%5D%7B%7D%5C%7C%22%3C%3E");
|
EXPECT_EQ(urlEncode(otherSymbols), "%60%25%5E%5B%5D%7B%7D%5C%7C%22%3C%3E");
|
||||||
EXPECT_EQ(urlEncode(otherSymbols), urlEncode(otherSymbols, true));
|
EXPECT_EQ(urlEncode(otherSymbols), urlEncode(otherSymbols, true));
|
||||||
|
|
Loading…
Reference in New Issue