Skip to content

Commit fb4a17d

Browse files
committed
Fixes eidheim#203: header field values are now correctly parsed even with more than 1 space after :
1 parent 231e5f0 commit fb4a17d

File tree

2 files changed

+16
-8
lines changed

2 files changed

+16
-8
lines changed

tests/parse_test.cpp

+12-2
Original file line numberDiff line numberDiff line change
@@ -77,17 +77,20 @@ class ClientTest : public ClientBase<HTTP> {
7777
ostream stream(&response->streambuf);
7878
stream << "HTTP/1.1 200 OK\r\n";
7979
stream << "TestHeader: test\r\n";
80-
stream << "TestHeader2:test2\r\n";
80+
stream << "TestHeader2: test2\r\n";
8181
stream << "TestHeader3:test3a\r\n";
8282
stream << "TestHeader3:test3b\r\n";
83+
stream << "TestHeader4:\r\n";
84+
stream << "TestHeader5: \r\n";
85+
stream << "TestHeader6: \r\n";
8386
stream << "\r\n";
8487

8588
assert(ResponseMessage::parse(response->content, response->http_version, response->status_code, response->header));
8689

8790
assert(response->http_version == "1.1");
8891
assert(response->status_code == "200 OK");
8992

90-
assert(response->header.size() == 4);
93+
assert(response->header.size() == 7);
9194
auto header_it = response->header.find("TestHeader");
9295
assert(header_it != response->header.end() && header_it->second == "test");
9396
header_it = response->header.find("TestHeader2");
@@ -105,6 +108,13 @@ class ClientTest : public ClientBase<HTTP> {
105108
assert(range.first != response->header.end() && range.second != response->header.end() &&
106109
((first->second == "test3a" && second->second == "test3b") ||
107110
(first->second == "test3b" && second->second == "test3a")));
111+
112+
header_it = response->header.find("TestHeader4");
113+
assert(header_it != response->header.end() && header_it->second == "");
114+
header_it = response->header.find("TestHeader5");
115+
assert(header_it != response->header.end() && header_it->second == "");
116+
header_it = response->header.find("TestHeader6");
117+
assert(header_it != response->header.end() && header_it->second == "");
108118
}
109119
};
110120

utility.hpp

+4-6
Original file line numberDiff line numberDiff line change
@@ -142,12 +142,10 @@ namespace SimpleWeb {
142142
std::size_t param_end;
143143
while((param_end = line.find(':')) != std::string::npos) {
144144
std::size_t value_start = param_end + 1;
145-
if(value_start < line.size()) {
146-
if(line[value_start] == ' ')
147-
value_start++;
148-
if(value_start < line.size())
149-
result.emplace(line.substr(0, param_end), line.substr(value_start, line.size() - value_start - 1));
150-
}
145+
while(value_start + 1 < line.size() && line[value_start] == ' ')
146+
++value_start;
147+
if(value_start < line.size())
148+
result.emplace(line.substr(0, param_end), line.substr(value_start, line.size() - value_start - 1));
151149

152150
getline(stream, line);
153151
}

0 commit comments

Comments
 (0)