Fixes #203: header field values are now correctly parsed even with more than 1 space after :
This commit is contained in:
parent
231e5f0065
commit
fb4a17d5ed
2 changed files with 16 additions and 8 deletions
|
|
@ -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 == "");
|
||||
}
|
||||
};
|
||||
|
||||
|
|
|
|||
|
|
@ -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++;
|
||||
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);
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue