From fb4a17d5edce8a3ada31d9ed7280e7a736c25428 Mon Sep 17 00:00:00 2001 From: eidheim Date: Wed, 24 Jan 2018 13:04:06 +0100 Subject: [PATCH] Fixes #203: header field values are now correctly parsed even with more than 1 space after : --- tests/parse_test.cpp | 14 ++++++++++++-- utility.hpp | 10 ++++------ 2 files changed, 16 insertions(+), 8 deletions(-) diff --git a/tests/parse_test.cpp b/tests/parse_test.cpp index 3bc01f9..3bbd9b1 100644 --- a/tests/parse_test.cpp +++ b/tests/parse_test.cpp @@ -77,9 +77,12 @@ public: ostream stream(&response->streambuf); stream << "HTTP/1.1 200 OK\r\n"; stream << "TestHeader: test\r\n"; - stream << "TestHeader2:test2\r\n"; + stream << "TestHeader2: test2\r\n"; stream << "TestHeader3:test3a\r\n"; stream << "TestHeader3:test3b\r\n"; + stream << "TestHeader4:\r\n"; + stream << "TestHeader5: \r\n"; + stream << "TestHeader6: \r\n"; stream << "\r\n"; assert(ResponseMessage::parse(response->content, response->http_version, response->status_code, response->header)); @@ -87,7 +90,7 @@ public: assert(response->http_version == "1.1"); assert(response->status_code == "200 OK"); - assert(response->header.size() == 4); + assert(response->header.size() == 7); auto header_it = response->header.find("TestHeader"); assert(header_it != response->header.end() && header_it->second == "test"); header_it = response->header.find("TestHeader2"); @@ -105,6 +108,13 @@ public: assert(range.first != response->header.end() && range.second != response->header.end() && ((first->second == "test3a" && second->second == "test3b") || (first->second == "test3b" && second->second == "test3a"))); + + header_it = response->header.find("TestHeader4"); + assert(header_it != response->header.end() && header_it->second == ""); + header_it = response->header.find("TestHeader5"); + assert(header_it != response->header.end() && header_it->second == ""); + header_it = response->header.find("TestHeader6"); + assert(header_it != response->header.end() && header_it->second == ""); } }; diff --git a/utility.hpp b/utility.hpp index 76fc7d5..e46c0aa 100644 --- a/utility.hpp +++ b/utility.hpp @@ -142,12 +142,10 @@ namespace SimpleWeb { std::size_t param_end; while((param_end = line.find(':')) != std::string::npos) { std::size_t value_start = param_end + 1; - if(value_start < line.size()) { - if(line[value_start] == ' ') - value_start++; - if(value_start < line.size()) - result.emplace(line.substr(0, param_end), line.substr(value_start, line.size() - value_start - 1)); - } + while(value_start + 1 < line.size() && line[value_start] == ' ') + ++value_start; + if(value_start < line.size()) + result.emplace(line.substr(0, param_end), line.substr(value_start, line.size() - value_start - 1)); getline(stream, line); }