mirror of https://github.com/kiwix/libkiwix.git
RequestContext::get_query() is fully URI-encoded
This commit is contained in:
parent
772243e832
commit
63e0d5c7c2
|
@ -216,7 +216,7 @@ string OPDSDumper::dumpOPDSFeedV2(const std::vector<std::string>& bookIds, const
|
||||||
{"endpoint_root", endpointRoot},
|
{"endpoint_root", endpointRoot},
|
||||||
{"feed_id", gen_uuid(libraryId + endpoint + "?" + query)},
|
{"feed_id", gen_uuid(libraryId + endpoint + "?" + query)},
|
||||||
{"filter", onlyAsNonEmptyMustacheValue(query)},
|
{"filter", onlyAsNonEmptyMustacheValue(query)},
|
||||||
{"query", query.empty() ? "" : "?" + urlEncode(query)},
|
{"query", query.empty() ? "" : "?" + query},
|
||||||
{"totalResults", to_string(m_totalResults)},
|
{"totalResults", to_string(m_totalResults)},
|
||||||
{"startIndex", to_string(m_startIndex)},
|
{"startIndex", to_string(m_startIndex)},
|
||||||
{"itemsPerPage", to_string(m_count)},
|
{"itemsPerPage", to_string(m_count)},
|
||||||
|
|
|
@ -116,10 +116,10 @@ MHD_Result RequestContext::fill_argument(void *__this, enum MHD_ValueKind kind,
|
||||||
if ( ! _this->queryString.empty() ) {
|
if ( ! _this->queryString.empty() ) {
|
||||||
_this->queryString += "&";
|
_this->queryString += "&";
|
||||||
}
|
}
|
||||||
_this->queryString += key;
|
_this->queryString += urlEncode(key, true);
|
||||||
if ( value ) {
|
if ( value ) {
|
||||||
_this->queryString += "=";
|
_this->queryString += "=";
|
||||||
_this->queryString += value;
|
_this->queryString += urlEncode(value, true);
|
||||||
}
|
}
|
||||||
return MHD_YES;
|
return MHD_YES;
|
||||||
}
|
}
|
||||||
|
|
|
@ -193,7 +193,7 @@ TEST_F(LibraryServerTest, catalog_search_by_phrase)
|
||||||
EXPECT_EQ(maskVariableOPDSFeedData(r->body),
|
EXPECT_EQ(maskVariableOPDSFeedData(r->body),
|
||||||
OPDS_FEED_TAG
|
OPDS_FEED_TAG
|
||||||
" <id>12345678-90ab-cdef-1234-567890abcdef</id>\n"
|
" <id>12345678-90ab-cdef-1234-567890abcdef</id>\n"
|
||||||
" <title>Filtered zims (q="ray charles")</title>\n"
|
" <title>Filtered zims (q=%22ray%20charles%22)</title>\n"
|
||||||
" <updated>YYYY-MM-DDThh:mm:ssZ</updated>\n"
|
" <updated>YYYY-MM-DDThh:mm:ssZ</updated>\n"
|
||||||
" <totalResults>2</totalResults>\n"
|
" <totalResults>2</totalResults>\n"
|
||||||
" <startIndex>0</startIndex>\n"
|
" <startIndex>0</startIndex>\n"
|
||||||
|
@ -212,7 +212,7 @@ TEST_F(LibraryServerTest, catalog_search_by_words)
|
||||||
EXPECT_EQ(maskVariableOPDSFeedData(r->body),
|
EXPECT_EQ(maskVariableOPDSFeedData(r->body),
|
||||||
OPDS_FEED_TAG
|
OPDS_FEED_TAG
|
||||||
" <id>12345678-90ab-cdef-1234-567890abcdef</id>\n"
|
" <id>12345678-90ab-cdef-1234-567890abcdef</id>\n"
|
||||||
" <title>Filtered zims (q=ray charles)</title>\n"
|
" <title>Filtered zims (q=ray%20charles)</title>\n"
|
||||||
" <updated>YYYY-MM-DDThh:mm:ssZ</updated>\n"
|
" <updated>YYYY-MM-DDThh:mm:ssZ</updated>\n"
|
||||||
" <totalResults>3</totalResults>\n"
|
" <totalResults>3</totalResults>\n"
|
||||||
" <startIndex>0</startIndex>\n"
|
" <startIndex>0</startIndex>\n"
|
||||||
|
@ -233,7 +233,7 @@ TEST_F(LibraryServerTest, catalog_prefix_search)
|
||||||
EXPECT_EQ(maskVariableOPDSFeedData(r->body),
|
EXPECT_EQ(maskVariableOPDSFeedData(r->body),
|
||||||
OPDS_FEED_TAG
|
OPDS_FEED_TAG
|
||||||
" <id>12345678-90ab-cdef-1234-567890abcdef</id>\n"
|
" <id>12345678-90ab-cdef-1234-567890abcdef</id>\n"
|
||||||
" <title>Filtered zims (q=description:ray description:charles)</title>\n"
|
" <title>Filtered zims (q=description%3Aray%20description%3Acharles)</title>\n"
|
||||||
" <updated>YYYY-MM-DDThh:mm:ssZ</updated>\n"
|
" <updated>YYYY-MM-DDThh:mm:ssZ</updated>\n"
|
||||||
" <totalResults>2</totalResults>\n"
|
" <totalResults>2</totalResults>\n"
|
||||||
" <startIndex>0</startIndex>\n"
|
" <startIndex>0</startIndex>\n"
|
||||||
|
@ -250,7 +250,7 @@ TEST_F(LibraryServerTest, catalog_prefix_search)
|
||||||
EXPECT_EQ(maskVariableOPDSFeedData(r->body),
|
EXPECT_EQ(maskVariableOPDSFeedData(r->body),
|
||||||
OPDS_FEED_TAG
|
OPDS_FEED_TAG
|
||||||
" <id>12345678-90ab-cdef-1234-567890abcdef</id>\n"
|
" <id>12345678-90ab-cdef-1234-567890abcdef</id>\n"
|
||||||
" <title>Filtered zims (q=title:"ray charles")</title>\n"
|
" <title>Filtered zims (q=title%3A%22ray%20charles%22)</title>\n"
|
||||||
" <updated>YYYY-MM-DDThh:mm:ssZ</updated>\n"
|
" <updated>YYYY-MM-DDThh:mm:ssZ</updated>\n"
|
||||||
" <totalResults>1</totalResults>\n"
|
" <totalResults>1</totalResults>\n"
|
||||||
" <startIndex>0</startIndex>\n"
|
" <startIndex>0</startIndex>\n"
|
||||||
|
@ -269,7 +269,7 @@ TEST_F(LibraryServerTest, catalog_search_with_word_exclusion)
|
||||||
EXPECT_EQ(maskVariableOPDSFeedData(r->body),
|
EXPECT_EQ(maskVariableOPDSFeedData(r->body),
|
||||||
OPDS_FEED_TAG
|
OPDS_FEED_TAG
|
||||||
" <id>12345678-90ab-cdef-1234-567890abcdef</id>\n"
|
" <id>12345678-90ab-cdef-1234-567890abcdef</id>\n"
|
||||||
" <title>Filtered zims (q=ray -uncategorized)</title>\n"
|
" <title>Filtered zims (q=ray%20-uncategorized)</title>\n"
|
||||||
" <updated>YYYY-MM-DDThh:mm:ssZ</updated>\n"
|
" <updated>YYYY-MM-DDThh:mm:ssZ</updated>\n"
|
||||||
" <totalResults>2</totalResults>\n"
|
" <totalResults>2</totalResults>\n"
|
||||||
" <startIndex>0</startIndex>\n"
|
" <startIndex>0</startIndex>\n"
|
||||||
|
@ -288,7 +288,7 @@ TEST_F(LibraryServerTest, catalog_search_by_tag)
|
||||||
EXPECT_EQ(maskVariableOPDSFeedData(r->body),
|
EXPECT_EQ(maskVariableOPDSFeedData(r->body),
|
||||||
OPDS_FEED_TAG
|
OPDS_FEED_TAG
|
||||||
" <id>12345678-90ab-cdef-1234-567890abcdef</id>\n"
|
" <id>12345678-90ab-cdef-1234-567890abcdef</id>\n"
|
||||||
" <title>Filtered zims (tag=_category:jazz)</title>\n"
|
" <title>Filtered zims (tag=_category%3Ajazz)</title>\n"
|
||||||
" <updated>YYYY-MM-DDThh:mm:ssZ</updated>\n"
|
" <updated>YYYY-MM-DDThh:mm:ssZ</updated>\n"
|
||||||
" <totalResults>1</totalResults>\n"
|
" <totalResults>1</totalResults>\n"
|
||||||
" <startIndex>0</startIndex>\n"
|
" <startIndex>0</startIndex>\n"
|
||||||
|
@ -342,7 +342,7 @@ TEST_F(LibraryServerTest, catalog_search_by_language)
|
||||||
EXPECT_EQ(maskVariableOPDSFeedData(r->body),
|
EXPECT_EQ(maskVariableOPDSFeedData(r->body),
|
||||||
OPDS_FEED_TAG
|
OPDS_FEED_TAG
|
||||||
" <id>12345678-90ab-cdef-1234-567890abcdef</id>\n"
|
" <id>12345678-90ab-cdef-1234-567890abcdef</id>\n"
|
||||||
" <title>Filtered zims (lang=eng,fra)</title>\n"
|
" <title>Filtered zims (lang=eng%2Cfra)</title>\n"
|
||||||
" <updated>YYYY-MM-DDThh:mm:ssZ</updated>\n"
|
" <updated>YYYY-MM-DDThh:mm:ssZ</updated>\n"
|
||||||
" <totalResults>2</totalResults>\n"
|
" <totalResults>2</totalResults>\n"
|
||||||
" <startIndex>0</startIndex>\n"
|
" <startIndex>0</startIndex>\n"
|
||||||
|
@ -694,7 +694,7 @@ TEST_F(LibraryServerTest, catalog_v2_entries_filtered_by_search_terms)
|
||||||
EXPECT_EQ(r->status, 200);
|
EXPECT_EQ(r->status, 200);
|
||||||
EXPECT_EQ(maskVariableOPDSFeedData(r->body),
|
EXPECT_EQ(maskVariableOPDSFeedData(r->body),
|
||||||
CATALOG_V2_ENTRIES_PREAMBLE("?q=%22ray%20charles%22")
|
CATALOG_V2_ENTRIES_PREAMBLE("?q=%22ray%20charles%22")
|
||||||
" <title>Filtered Entries (q="ray charles")</title>\n"
|
" <title>Filtered Entries (q=%22ray%20charles%22)</title>\n"
|
||||||
" <updated>YYYY-MM-DDThh:mm:ssZ</updated>\n"
|
" <updated>YYYY-MM-DDThh:mm:ssZ</updated>\n"
|
||||||
" <totalResults>2</totalResults>\n"
|
" <totalResults>2</totalResults>\n"
|
||||||
" <startIndex>0</startIndex>\n"
|
" <startIndex>0</startIndex>\n"
|
||||||
|
@ -726,8 +726,8 @@ TEST_F(LibraryServerTest, catalog_v2_entries_filtered_by_language)
|
||||||
const auto r = zfs1_->GET("/ROOT/catalog/v2/entries?lang=eng,fra");
|
const auto r = zfs1_->GET("/ROOT/catalog/v2/entries?lang=eng,fra");
|
||||||
EXPECT_EQ(r->status, 200);
|
EXPECT_EQ(r->status, 200);
|
||||||
EXPECT_EQ(maskVariableOPDSFeedData(r->body),
|
EXPECT_EQ(maskVariableOPDSFeedData(r->body),
|
||||||
CATALOG_V2_ENTRIES_PREAMBLE("?lang=eng,fra")
|
CATALOG_V2_ENTRIES_PREAMBLE("?lang=eng%2Cfra")
|
||||||
" <title>Filtered Entries (lang=eng,fra)</title>\n"
|
" <title>Filtered Entries (lang=eng%2Cfra)</title>\n"
|
||||||
" <updated>YYYY-MM-DDThh:mm:ssZ</updated>\n"
|
" <updated>YYYY-MM-DDThh:mm:ssZ</updated>\n"
|
||||||
" <totalResults>2</totalResults>\n"
|
" <totalResults>2</totalResults>\n"
|
||||||
" <startIndex>0</startIndex>\n"
|
" <startIndex>0</startIndex>\n"
|
||||||
|
@ -865,7 +865,7 @@ TEST_F(LibraryServerTest, no_name_mapper_returned_catalog_use_uuid_in_link)
|
||||||
EXPECT_EQ(maskVariableOPDSFeedData(r->body),
|
EXPECT_EQ(maskVariableOPDSFeedData(r->body),
|
||||||
OPDS_FEED_TAG
|
OPDS_FEED_TAG
|
||||||
" <id>12345678-90ab-cdef-1234-567890abcdef</id>\n"
|
" <id>12345678-90ab-cdef-1234-567890abcdef</id>\n"
|
||||||
" <title>Filtered zims (tag=_category:jazz)</title>\n"
|
" <title>Filtered zims (tag=_category%3Ajazz)</title>\n"
|
||||||
" <updated>YYYY-MM-DDThh:mm:ssZ</updated>\n"
|
" <updated>YYYY-MM-DDThh:mm:ssZ</updated>\n"
|
||||||
" <totalResults>1</totalResults>\n"
|
" <totalResults>1</totalResults>\n"
|
||||||
" <startIndex>0</startIndex>\n"
|
" <startIndex>0</startIndex>\n"
|
||||||
|
|
|
@ -827,7 +827,7 @@ TEST_F(ServerTest, Http400HtmlError)
|
||||||
expected_body==R"(
|
expected_body==R"(
|
||||||
<h1>Invalid request</h1>
|
<h1>Invalid request</h1>
|
||||||
<p>
|
<p>
|
||||||
The requested URL "/ROOT/search?content=non-existing-book&pattern=a"<script foo>" is not a valid request.
|
The requested URL "/ROOT/search?content=non-existing-book&pattern=a%22%3Cscript%20foo%3E" is not a valid request.
|
||||||
</p>
|
</p>
|
||||||
<p>
|
<p>
|
||||||
No such book: non-existing-book
|
No such book: non-existing-book
|
||||||
|
@ -910,7 +910,7 @@ TEST_F(ServerTest, HttpXmlError)
|
||||||
/* HTTP status code */ 400,
|
/* HTTP status code */ 400,
|
||||||
/* expected response XML */ R"(
|
/* expected response XML */ R"(
|
||||||
<error>Invalid request</error>
|
<error>Invalid request</error>
|
||||||
<detail>The requested URL "/ROOT/search?format=xml&content=non-existing-book&pattern=a"<script foo>" is not a valid request.</detail>
|
<detail>The requested URL "/ROOT/search?format=xml&content=non-existing-book&pattern=a%22%3Cscript%20foo%3E" is not a valid request.</detail>
|
||||||
<detail>No such book: non-existing-book</detail>
|
<detail>No such book: non-existing-book</detail>
|
||||||
)" },
|
)" },
|
||||||
// There is a flaw in our way to handle query string, we cannot differenciate
|
// There is a flaw in our way to handle query string, we cannot differenciate
|
||||||
|
|
Loading…
Reference in New Issue