From 31cfa398113df3a5ef4cca02bf6121690085011f Mon Sep 17 00:00:00 2001 From: Brett Profitt Date: Sun, 9 Feb 2025 15:50:01 -0500 Subject: [PATCH] server : fix check for URI length to prevent incorrect HTTP 414 errors --- examples/server/httplib.h | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/examples/server/httplib.h b/examples/server/httplib.h index c2f12dd2a..4fb5c5040 100644 --- a/examples/server/httplib.h +++ b/examples/server/httplib.h @@ -7157,16 +7157,26 @@ Server::process_request(Stream &strm, const std::string &remote_addr, #endif #endif + auto req_line = line_reader.ptr(); + + // Extract URI from the request line + std::string method, uri, version; + std::istringstream iss(req_line); + iss >> method >> uri >> version; + // Check if the request URI doesn't exceed the limit - if (line_reader.size() > CPPHTTPLIB_REQUEST_URI_MAX_LENGTH) { + if (uri.size() > CPPHTTPLIB_REQUEST_URI_MAX_LENGTH) { Headers dummy; detail::read_headers(strm, dummy); res.status = StatusCode::UriTooLong_414; + res.body = "Request URI too long: " + uri; + res.set_header("Content-Type", "text/plain"); + return write_response(strm, close_connection, req, res); } // Request line and headers - if (!parse_request_line(line_reader.ptr(), req) || + if (!parse_request_line(req_line, req) || !detail::read_headers(strm, req.headers)) { res.status = StatusCode::BadRequest_400; return write_response(strm, close_connection, req, res);