Index: net/http/http_response_headers.cc |
=================================================================== |
--- net/http/http_response_headers.cc (revision 101858) |
+++ net/http/http_response_headers.cc (working copy) |
@@ -114,6 +114,13 @@ |
return 0; |
} |
+void CheckDoesNotHaveEmbededNulls(const std::string& str) { |
+ // Care needs to be taken when adding values to the raw headers string to |
+ // make sure it does not contain embeded NULLs. Any embeded '\0' may be |
+ // understood as line terminators and change how header lines get tokenized. |
+ CHECK(str.find('\0') == std::string::npos); |
+} |
+ |
} // namespace |
struct HttpResponseHeaders::ParsedHeader { |
@@ -300,6 +307,7 @@ |
} |
void HttpResponseHeaders::AddHeader(const std::string& header) { |
+ CheckDoesNotHaveEmbededNulls(header); |
DCHECK_EQ('\0', raw_headers_[raw_headers_.size() - 2]); |
DCHECK_EQ('\0', raw_headers_[raw_headers_.size() - 1]); |
// Don't copy the last null. |
@@ -315,6 +323,7 @@ |
} |
void HttpResponseHeaders::ReplaceStatusLine(const std::string& new_status) { |
+ CheckDoesNotHaveEmbededNulls(new_status); |
// Copy up to the null byte. This just copies the status line. |
std::string new_raw_headers(new_status); |
new_raw_headers.push_back('\0'); |