Blame SOURCES/squid-4.11-CVE-2020-15810.patch
|
|
88e69d |
diff --git a/src/HttpHeader.cc b/src/HttpHeader.cc
|
|
|
818ced |
index 67543a4..19efc6d 100644
|
|
|
88e69d |
--- a/src/HttpHeader.cc
|
|
|
88e69d |
+++ b/src/HttpHeader.cc
|
|
|
818ced |
@@ -445,18 +445,6 @@ HttpHeader::parse(const char *header_start, size_t hdrLen)
|
|
|
88e69d |
return 0;
|
|
|
88e69d |
}
|
|
|
88e69d |
|
|
|
88e69d |
- if (e->id == Http::HdrType::OTHER && stringHasWhitespace(e->name.termedBuf())) {
|
|
|
88e69d |
- debugs(55, warnOnError, "WARNING: found whitespace in HTTP header name {" <<
|
|
|
88e69d |
- getStringPrefix(field_start, field_end-field_start) << "}");
|
|
|
88e69d |
-
|
|
|
88e69d |
- if (!Config.onoff.relaxed_header_parser) {
|
|
|
88e69d |
- delete e;
|
|
|
88e69d |
- PROF_stop(HttpHeaderParse);
|
|
|
88e69d |
- clean();
|
|
|
88e69d |
- return 0;
|
|
|
88e69d |
- }
|
|
|
88e69d |
- }
|
|
|
88e69d |
-
|
|
|
88e69d |
addEntry(e);
|
|
|
88e69d |
}
|
|
|
88e69d |
|
|
|
818ced |
@@ -1451,6 +1439,20 @@ HttpHeaderEntry::parse(const char *field_start, const char *field_end, const htt
|
|
|
818ced |
}
|
|
|
88e69d |
}
|
|
|
88e69d |
|
|
|
88e69d |
+ /* RFC 7230 section 3.2:
|
|
|
88e69d |
+ *
|
|
|
88e69d |
+ * header-field = field-name ":" OWS field-value OWS
|
|
|
88e69d |
+ * field-name = token
|
|
|
88e69d |
+ * token = 1*TCHAR
|
|
|
88e69d |
+ */
|
|
|
88e69d |
+ for (const char *pos = field_start; pos < (field_start+name_len); ++pos) {
|
|
|
88e69d |
+ if (!CharacterSet::TCHAR[*pos]) {
|
|
|
88e69d |
+ debugs(55, 2, "found header with invalid characters in " <<
|
|
|
88e69d |
+ Raw("field-name", field_start, min(name_len,100)) << "...");
|
|
|
88e69d |
+ return nullptr;
|
|
|
88e69d |
+ }
|
|
|
88e69d |
+ }
|
|
|
88e69d |
+
|
|
|
88e69d |
/* now we know we can parse it */
|
|
|
88e69d |
|
|
|
88e69d |
debugs(55, 9, "parsing HttpHeaderEntry: near '" << getStringPrefix(field_start, field_end-field_start) << "'");
|