diff options
| author | Tatsuhiro Tsujikawa <tatsuhiro.t@gmail.com> | 2012-07-06 00:57:18 +0900 |
|---|---|---|
| committer | Tatsuhiro Tsujikawa <tatsuhiro.t@gmail.com> | 2012-07-06 00:57:18 +0900 |
| commit | b00ed1aa3083800679d904223816e1a408bf4766 (patch) | |
| tree | dc1f3f77423db4e5228003eff09e5458031007a6 /src/HttpHeaderProcessor.cc | |
| parent | f04090199f8c7bb25ebfca452f4bbe3d29904aad (diff) | |
More http header parser tests
Diffstat (limited to 'src/HttpHeaderProcessor.cc')
| -rw-r--r-- | src/HttpHeaderProcessor.cc | 5 |
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); |
