From 67185c9ee19a88f714b227b06dd249523fad55ca Mon Sep 17 00:00:00 2001 From: kishorenc Date: Sun, 31 May 2020 09:28:50 +0530 Subject: [PATCH] Limit per_page to a sane number. --- include/collection.h | 2 ++ src/collection.cpp | 8 ++++++-- 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/include/collection.h b/include/collection.h index 98959732..c1ebc55e 100644 --- a/include/collection.h +++ b/include/collection.h @@ -267,6 +267,8 @@ public: enum {MAX_ARRAY_MATCHES = 5}; + const size_t PER_PAGE_MAX = 250; + // Using a $ prefix so that these meta keys stay above record entries in a lexicographically ordered KV store static constexpr const char* COLLECTION_META_PREFIX = "$CM"; static constexpr const char* COLLECTION_NEXT_SEQ_PREFIX = "$CS"; diff --git a/src/collection.cpp b/src/collection.cpp index 42158f44..dd8e0b40 100644 --- a/src/collection.cpp +++ b/src/collection.cpp @@ -338,7 +338,7 @@ void Collection::populate_overrides(std::string query, Option Collection::search(const std::string & query, const std::vector & search_fields, const std::string & simple_filter_query, const std::vector & facet_fields, const std::vector & sort_fields, const int num_typos, - const size_t per_page, const size_t page, + size_t per_page, const size_t page, const token_ordering token_order, const bool prefix, const size_t drop_tokens_threshold, const spp::sparse_hash_set & include_fields, @@ -599,7 +599,11 @@ Option Collection::search(const std::string & query, const std:: return Option(422, message); } - const size_t max_hits = (page * per_page); + // ensure that per_page is limited to PER_PAGE_MAX for sanity + per_page = std::min(per_page, PER_PAGE_MAX); + + // ensure that (page * per_page) never exceeds number of documents in collection + const size_t max_hits = std::min((page * per_page), get_num_documents()); std::vector> searched_queries; // search queries used for generating the results std::vector raw_result_kvs;