summaryrefslogtreecommitdiff
path: root/src/HttpHeaderProcessor.cc
diff options
context:
space:
mode:
authorTatsuhiro Tsujikawa <tatsuhiro.t@gmail.com>2012-07-06 00:57:18 +0900
committerTatsuhiro Tsujikawa <tatsuhiro.t@gmail.com>2012-07-06 00:57:18 +0900
commitb00ed1aa3083800679d904223816e1a408bf4766 (patch)
treedc1f3f77423db4e5228003eff09e5458031007a6 /src/HttpHeaderProcessor.cc
parentf04090199f8c7bb25ebfca452f4bbe3d29904aad (diff)
More http header parser tests
Diffstat (limited to 'src/HttpHeaderProcessor.cc')
-rw-r--r--src/HttpHeaderProcessor.cc5
1 files changed, 5 insertions, 0 deletions
diff --git a/src/HttpHeaderProcessor.cc b/src/HttpHeaderProcessor.cc
index 1b027c5b..6baf7595 100644
--- a/src/HttpHeaderProcessor.cc
+++ b/src/HttpHeaderProcessor.cc
@@ -269,6 +269,9 @@ bool HttpHeaderProcessor::parse(const unsigned char* data, size_t length)
break;
case PREV_FIELD_NAME:
if(util::isLws(c)) {
+ if(lastFieldName_.empty()) {
+ throw DL_ABORT_EX("Bad HTTP header: field name starts with LWS");
+ }
// Evil Multi-line header field
state_ = FIELD_VALUE;
} else {
@@ -282,6 +285,8 @@ bool HttpHeaderProcessor::parse(const unsigned char* data, size_t length)
state_ = HEADERS_COMPLETE;
} else if(c == '\r') {
state_ = PREV_EOH;
+ } else if(c == ':') {
+ throw DL_ABORT_EX("Bad HTTP header: field name starts with ':'");
} else {
state_ = FIELD_NAME;
i = getFieldNameToken(lastFieldName_, data, length, i);