]> git.netwichtig.de Git - user/henk/code/inspircd.git/commitdiff
Be more specific when a HTTP parser error happens.
authorSadie Powell <sadie@witchery.services>
Thu, 3 Dec 2020 19:20:59 +0000 (19:20 +0000)
committerSadie Powell <sadie@witchery.services>
Fri, 4 Dec 2020 14:18:01 +0000 (14:18 +0000)
src/modules/m_httpd.cpp

index 330e98c6a9739877f85589f211d097db65feb8ab..b4e221e621094a11cd2dc393c594406d867742ff 100644 (file)
@@ -264,14 +264,14 @@ class HttpServerSocket : public BufferedSocket, public Timer, public insp::intru
                Close();
        }
 
-       void SendHTTPError(unsigned int response)
+       void SendHTTPError(unsigned int response, const char* errstr = NULL)
        {
                static HTTPHeaders empty;
                std::string data = InspIRCd::Format(
                        "<html><head></head><body style='font-family: sans-serif; text-align: center'>"
                        "<h1 style='font-size: 48pt'>Error %u</h1><h2 style='font-size: 24pt'>%s</h2><hr>"
                        "<small>Powered by <a href='https://www.inspircd.org'>InspIRCd</a></small></body></html>",
-                       response, http_status_str((http_status)response));
+                       response, errstr ? errstr : http_status_str((http_status)response));
 
                Page(data, response, &empty);
        }
@@ -303,8 +303,10 @@ class HttpServerSocket : public BufferedSocket, public Timer, public insp::intru
                if (parser.upgrade || HTTP_PARSER_ERRNO(&parser))
                        return;
                http_parser_execute(&parser, &parser_settings, recvq.data(), recvq.size());
-               if (parser.upgrade || HTTP_PARSER_ERRNO(&parser))
+               if (parser.upgrade)
                        SendHTTPError(status_code ? status_code : 400);
+               else if (HTTP_PARSER_ERRNO(&parser))
+                       SendHTTPError(status_code ? status_code : 400, http_errno_description((http_errno)parser.http_errno));
        }
 
        void ServeData()