From 9021f87715723ebb5a6caa3c1e7bdb061da23b88 Mon Sep 17 00:00:00 2001 From: Matthieu Gautier Date: Mon, 27 Nov 2017 12:44:25 +0000 Subject: [PATCH] Handle search with no content and empty query string. We need to handle : - No content because it is how we do multisearch. - No query string because it is how we can do geosearch. --- src/server/kiwix-serve.cpp | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/src/server/kiwix-serve.cpp b/src/server/kiwix-serve.cpp index ca76026..b210024 100644 --- a/src/server/kiwix-serve.cpp +++ b/src/server/kiwix-serve.cpp @@ -475,10 +475,11 @@ static struct MHD_Response* handle_search(RequestContext* request) std::string patternString; try { humanReadableBookId = request->get_argument("content"); + } catch (const std::out_of_range&) {} + + try { patternString = request->get_argument("pattern"); - } catch (const std::out_of_range&) { - return build_homepage(request); - } + } catch (const std::out_of_range&) {} /* Retrive geo search */ bool has_geo_query = false; @@ -502,7 +503,7 @@ static struct MHD_Response* handle_search(RequestContext* request) bool cacheEnabled = !(searcher == globalSearcher); /* Try first to load directly the article */ - if (reader != nullptr) { + if (reader != nullptr && !patternString.empty()) { std::string patternCorrespondingUrl; auto variants = reader->getTitleVariants(patternString); auto variantsItr = variants.begin(); @@ -522,7 +523,7 @@ static struct MHD_Response* handle_search(RequestContext* request) } /* Make the search */ - if (reader_searcher.second != nullptr && + if (searcher != nullptr && (!patternString.empty() || has_geo_query)) { auto start = 0; try {