| 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');
|
|
|