* HTTP.cpp : fix parse_header_line (#501)

This commit is contained in:
hagen 2016-05-26 00:00:00 +00:00
parent 2e1a9a8df9
commit 43a90d7b98
2 changed files with 8 additions and 2 deletions

View File

@ -45,9 +45,10 @@ namespace http {
bool parse_header_line(const std::string & line, std::map<std::string, std::string> & headers) {
std::size_t pos = 0;
std::size_t len = 2; /* strlen(": ") */
std::size_t max = line.length();
if ((pos = line.find(": ", pos)) == std::string::npos)
return false;
while (isspace(line.at(pos + len)))
while ((pos + len) < max && isspace(line.at(pos + len)))
len++;
std::string name = line.substr(0, pos);
std::string value = line.substr(pos + len);

View File

@ -68,6 +68,7 @@ int main() {
buf =
"GET http://inr.i2p HTTP/1.1\r\n"
"Host: stats.i2p\r\n"
"Accept-Encoding: \r\n"
"Accept: */*\r\n"
"\r\n";
len = strlen(buf);
@ -76,9 +77,13 @@ int main() {
assert(req->method == "GET");
assert(req->uri == "http://inr.i2p");
assert(req->host == "stats.i2p");
assert(req->headers.size() == 2);
assert(req->headers.size() == 3);
assert(req->headers.count("Host") == 1);
assert(req->headers.count("Accept") == 1);
assert(req->headers.count("Accept-Encoding") == 1);
assert(req->headers["Host"] == "stats.i2p");
assert(req->headers["Accept"] == "*/*");
assert(req->headers["Accept-Encoding"] == "");
delete req;
return 0;