From 58f0a716a63fcd93f8c1257cc0c14dc307bc56e9 Mon Sep 17 00:00:00 2001 From: Matthieu Gautier Date: Tue, 10 Oct 2017 15:17:42 +0200 Subject: [PATCH] =?UTF-8?q?Correctly=20return=20404=C2=A0if=20asked=20skin?= =?UTF-8?q?=20is=20not=20existing.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Fix #83 --- src/server/kiwix-serve.cpp | 39 ++++++++++++++++++++++++-------------- 1 file changed, 25 insertions(+), 14 deletions(-) diff --git a/src/server/kiwix-serve.cpp b/src/server/kiwix-serve.cpp index 2e0fcb8..6d2872f 100644 --- a/src/server/kiwix-serve.cpp +++ b/src/server/kiwix-serve.cpp @@ -283,6 +283,24 @@ static struct MHD_Response* build_response(const void* data, return response; } + +static struct MHD_Response* build_404(RequestContext* request_context) { + std::string content + = "\nContent not found

Not " + "Found

The requested URL \"" + + request_context->urlStr + "\" was not found on this server.

"; + auto mimeType = "text/html"; + request_context->httpResponseCode = MHD_HTTP_NOT_FOUND; + introduceTaskbar(content, request_context->humanReadableBookId); + bool deflated + = request_context->acceptEncodingDeflate && compress_content(content, mimeType); + return build_response( + content.data(), content.size(), "", mimeType, deflated, false); +} + + ssize_t callback_reader_from_blob(void* cls, uint64_t pos, char* buf, @@ -382,7 +400,12 @@ static struct MHD_Response* handle_suggest(RequestContext* request_context) static struct MHD_Response* handle_skin(RequestContext* request_context) { - std::string content = getResource(request_context->urlStr.substr(6)); + std::string content; + try { + content = getResource(request_context->urlStr.substr(6)); + } catch (const ResourceNotFound& e) { + return build_404(request_context); + } std::string mimeType = getMimeTypeForFile(request_context->urlStr); bool deflated = request_context->acceptEncodingDeflate && compress_content(content, mimeType); return build_response( @@ -500,19 +523,7 @@ static struct MHD_Response* handle_content(RequestContext* request_context) if (isVerbose.load()) printf("Failed to find %s\n", request_context->urlStr.c_str()); - content - = "\nContent not found

Not " - "Found

The requested URL \"" - + request_context->urlStr + "\" was not found on this server.

"; - mimeType = "text/html"; - request_context->httpResponseCode = MHD_HTTP_NOT_FOUND; - introduceTaskbar(content, request_context->humanReadableBookId); - bool deflated - = request_context->acceptEncodingDeflate && compress_content(content, mimeType); - return build_response( - content.data(), content.size(), "", mimeType, deflated, false); + return build_404(request_context); } try {