From 40db42108f4303057a0494710ab06c796bb60448 Mon Sep 17 00:00:00 2001 From: yhirose Date: Sat, 19 Dec 2020 12:02:11 -0500 Subject: [PATCH] Fixed problem with invalid requests including spaces in URL path --- httplib.h | 2 +- test/test.cc | 6 ++++++ 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/httplib.h b/httplib.h index 092940e..1836b20 100644 --- a/httplib.h +++ b/httplib.h @@ -4204,7 +4204,7 @@ inline void Server::stop() { inline bool Server::parse_request_line(const char *s, Request &req) { const static std::regex re( "(GET|HEAD|POST|PUT|DELETE|CONNECT|OPTIONS|TRACE|PATCH|PRI) " - "(([^?]+)(?:\\?(.*?))?) (HTTP/1\\.[01])\r\n"); + "(([^? ]+)(?:\\?([^ ]*?))?) (HTTP/1\\.[01])\r\n"); std::cmatch m; if (std::regex_match(s, m, re)) { diff --git a/test/test.cc b/test/test.cc index 9eb577b..8222125 100644 --- a/test/test.cc +++ b/test/test.cc @@ -3004,6 +3004,12 @@ TEST(ServerRequestParsingTest, InvalidHeaderTextWithExtraCR) { "Content-Type: text/plain\r\n\r"); } +TEST(ServerRequestParsingTest, InvalidSpaceInURL) { + std::string out; + test_raw_request("GET /h i HTTP/1.1\r\n\r\n", &out); + EXPECT_EQ("HTTP/1.1 400 Bad Request", out.substr(0, 24)); +} + TEST(ServerStopTest, StopServerWithChunkedTransmission) { Server svr;