Proper URI-encoding in kiwix::getSearchUrl()

This commit is contained in:
Veloman Yunkan 2023-01-25 17:16:43 +04:00
parent 82dcba542a
commit ec81d5904d
2 changed files with 12 additions and 12 deletions

View File

@ -42,19 +42,19 @@ std::string buildSearchString(const Filter& f)
{ {
std::ostringstream oss; std::ostringstream oss;
if ( f.hasQuery() ) if ( f.hasQuery() )
oss << AMP << "q=" << urlEncode(f.getQuery()); oss << AMP << "q=" << urlEncode(f.getQuery(), true);
if ( f.hasCategory() ) if ( f.hasCategory() )
oss << AMP << "category=" << urlEncode(f.getCategory()); oss << AMP << "category=" << urlEncode(f.getCategory(), true);
if ( f.hasLang() ) if ( f.hasLang() )
oss << AMP << "lang=" << urlEncode(f.getLang()); oss << AMP << "lang=" << urlEncode(f.getLang(), true);
if ( f.hasName() ) if ( f.hasName() )
oss << AMP << "name=" << urlEncode(f.getName()); oss << AMP << "name=" << urlEncode(f.getName(), true);
if ( !f.getAcceptTags().empty() ) if ( !f.getAcceptTags().empty() )
oss << AMP << "tag=" << urlEncode(join(f.getAcceptTags(), ";")); oss << AMP << "tag=" << urlEncode(join(f.getAcceptTags(), ";"), true);
return oss.str(); return oss.str();
} }

View File

@ -38,33 +38,33 @@ TEST(OpdsCatalog, getSearchUrl)
{ {
Filter f; Filter f;
f.query("abc def#xyz"); f.query("abc def#xyz");
EXPECT_SEARCH_URL("/catalog/v2/entries?q=abc%20def#xyz"); EXPECT_SEARCH_URL("/catalog/v2/entries?q=abc%20def%23xyz");
} }
{ {
Filter f; Filter f;
f.category("ted&bob"); f.category("ted&bob");
EXPECT_SEARCH_URL("/catalog/v2/entries?category=ted&bob"); EXPECT_SEARCH_URL("/catalog/v2/entries?category=ted%26bob");
} }
{ {
Filter f; Filter f;
f.lang("eng,fra"); f.lang("eng,fra");
EXPECT_SEARCH_URL("/catalog/v2/entries?lang=eng,fra"); EXPECT_SEARCH_URL("/catalog/v2/entries?lang=eng%2Cfra");
} }
{ {
Filter f; Filter f;
f.name("second?"); f.name("second?");
EXPECT_SEARCH_URL("/catalog/v2/entries?name=second?"); EXPECT_SEARCH_URL("/catalog/v2/entries?name=second%3F");
} }
{ {
Filter f; Filter f;
f.acceptTags({"#paper", "#plastic"}); f.acceptTags({"#paper", "#plastic"});
EXPECT_SEARCH_URL("/catalog/v2/entries?tag=#paper;#plastic"); EXPECT_SEARCH_URL("/catalog/v2/entries?tag=%23paper%3B%23plastic");
} }
{ {
Filter f; Filter f;
f.query("abc=123"); f.query("abc=123");
f.category("@ted"); f.category("@ted");
EXPECT_SEARCH_URL("/catalog/v2/entries?q=abc=123&category=@ted"); EXPECT_SEARCH_URL("/catalog/v2/entries?q=abc%3D123&category=%40ted");
} }
{ {
Filter f; Filter f;
@ -79,7 +79,7 @@ TEST(OpdsCatalog, getSearchUrl)
f.lang("html"); f.lang("html");
f.name("edsonarantesdonascimento"); f.name("edsonarantesdonascimento");
f.acceptTags({"body", "script"}); f.acceptTags({"body", "script"});
EXPECT_SEARCH_URL("/catalog/v2/entries?q=peru&category=scifi&lang=html&name=edsonarantesdonascimento&tag=body;script"); EXPECT_SEARCH_URL("/catalog/v2/entries?q=peru&category=scifi&lang=html&name=edsonarantesdonascimento&tag=body%3Bscript");
} }
#undef EXPECT_SEARCH_URL #undef EXPECT_SEARCH_URL
} }