HTTP: tweak for malformed header handling.

This commit is contained in:
James Turner
2014-01-07 14:06:51 +00:00
parent d82c8eb945
commit 1bd9a440e8
2 changed files with 12 additions and 3 deletions

View File

@@ -65,6 +65,12 @@ class Connection;
typedef std::multimap<std::string, Connection*> ConnectionDict;
typedef std::list<Request_ptr> RequestList;
static bool isFailureStatus(int httpStatus)
{
int majorCode = httpStatus / 100;
return (majorCode != 2);
}
class Client::ClientPrivate
{
public:
@@ -214,8 +220,12 @@ public:
assert(state == STATE_WAITING_FOR_RESPONSE);
activeRequest = sentRequests.front();
activeRequest->responseStart(buffer);
activeRequest->responseStart(buffer);
if (isFailureStatus(activeRequest->responseCode())) {
handleError(EIO);
return;
}
state = STATE_GETTING_HEADERS;
buffer.clear();
if (activeRequest->responseCode() == 204) {

View File

@@ -115,7 +115,6 @@ void Request::responseStart(const std::string& r)
const int maxSplit = 2; // HTTP/1.1 nnn reason-string
string_list parts = strutils::split(r, NULL, maxSplit);
if (parts.size() != 3) {
SG_LOG(SG_IO, SG_WARN, "HTTP::Request: malformed response start:" << r);
setFailure(400, "malformed HTTP response header");
return;
}