Browse Source

* HTTP.cpp : fix parse_header_line (#501)

pull/503/head
hagen 9 years ago
parent
commit
43a90d7b98
  1. 3
      HTTP.cpp
  2. 7
      tests/test-http-req.cpp

3
HTTP.cpp

@ -45,9 +45,10 @@ namespace http { @@ -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);

7
tests/test-http-req.cpp

@ -68,6 +68,7 @@ int main() { @@ -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() { @@ -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;

Loading…
Cancel
Save