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
|
|
@ -80,6 +80,9 @@ public:
|
||||||
stream << "TestHeader2: test2\r\n";
|
stream << "TestHeader2: test2\r\n";
|
||||||
stream << "TestHeader3:test3a\r\n";
|
stream << "TestHeader3:test3a\r\n";
|
||||||
stream << "TestHeader3:test3b\r\n";
|
stream << "TestHeader3:test3b\r\n";
|
||||||
|
stream << "TestHeader4:\r\n";
|
||||||
|
stream << "TestHeader5: \r\n";
|
||||||
|
stream << "TestHeader6: \r\n";
|
||||||
stream << "\r\n";
|
stream << "\r\n";
|
||||||
|
|
||||||
assert(ResponseMessage::parse(response->content, response->http_version, response->status_code, response->header));
|
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->http_version == "1.1");
|
||||||
assert(response->status_code == "200 OK");
|
assert(response->status_code == "200 OK");
|
||||||
|
|
||||||
assert(response->header.size() == 4);
|
assert(response->header.size() == 7);
|
||||||
auto header_it = response->header.find("TestHeader");
|
auto header_it = response->header.find("TestHeader");
|
||||||
assert(header_it != response->header.end() && header_it->second == "test");
|
assert(header_it != response->header.end() && header_it->second == "test");
|
||||||
header_it = response->header.find("TestHeader2");
|
header_it = response->header.find("TestHeader2");
|
||||||
|
|
@ -105,6 +108,13 @@ public:
|
||||||
assert(range.first != response->header.end() && range.second != response->header.end() &&
|
assert(range.first != response->header.end() && range.second != response->header.end() &&
|
||||||
((first->second == "test3a" && second->second == "test3b") ||
|
((first->second == "test3a" && second->second == "test3b") ||
|
||||||
(first->second == "test3b" && second->second == "test3a")));
|
(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;
|
std::size_t param_end;
|
||||||
while((param_end = line.find(':')) != std::string::npos) {
|
while((param_end = line.find(':')) != std::string::npos) {
|
||||||
std::size_t value_start = param_end + 1;
|
std::size_t value_start = param_end + 1;
|
||||||
if(value_start < line.size()) {
|
while(value_start + 1 < line.size() && line[value_start] == ' ')
|
||||||
if(line[value_start] == ' ')
|
++value_start;
|
||||||
value_start++;
|
|
||||||
if(value_start < line.size())
|
if(value_start < line.size())
|
||||||
result.emplace(line.substr(0, param_end), line.substr(value_start, line.size() - value_start - 1));
|
result.emplace(line.substr(0, param_end), line.substr(value_start, line.size() - value_start - 1));
|
||||||
}
|
|
||||||
|
|
||||||
getline(stream, line);
|
getline(stream, line);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue