Index: net/quic/core/spdy_utils.cc |
diff --git a/net/quic/core/spdy_utils.cc b/net/quic/core/spdy_utils.cc |
index 33917f4674db4f195a81e26ba5090f5b964cc6ed..aab7f6f6895e6837b1a803309f1b696c83e77a67 100644 |
--- a/net/quic/core/spdy_utils.cc |
+++ b/net/quic/core/spdy_utils.cc |
@@ -19,6 +19,7 @@ |
#include "url/gurl.h" |
using base::StringPiece; |
+using base::ContainsKey; |
using std::string; |
using std::vector; |
@@ -47,34 +48,39 @@ bool SpdyUtils::ParseHeaders(const char* data, |
return false; // Headers were invalid. |
} |
+ if (!ContainsKey(*headers, "content-length")) { |
+ return true; |
+ } |
+ |
return ExtractContentLengthFromHeaders(content_length, headers); |
} |
// static |
bool SpdyUtils::ExtractContentLengthFromHeaders(int64_t* content_length, |
SpdyHeaderBlock* headers) { |
- if (base::ContainsKey(*headers, "content-length")) { |
- // Check whether multiple values are consistent. |
- base::StringPiece content_length_header = (*headers)["content-length"]; |
- vector<string> values = |
- base::SplitString(content_length_header, base::StringPiece("\0", 1), |
- base::TRIM_WHITESPACE, base::SPLIT_WANT_ALL); |
- for (const string& value : values) { |
- int64_t new_value; |
- if (!base::StringToInt64(value, &new_value) || new_value < 0) { |
- DLOG(ERROR) << "Content length was either unparseable or negative."; |
- return false; |
- } |
- if (*content_length < 0) { |
- *content_length = new_value; |
- continue; |
- } |
- if (new_value != *content_length) { |
- DLOG(ERROR) << "Parsed content length " << new_value << " is " |
- << "inconsistent with previously detected content length " |
- << *content_length; |
- return false; |
- } |
+ if (!ContainsKey(*headers, "content-length")) { |
+ return false; |
+ } |
+ // Check whether multiple values are consistent. |
+ base::StringPiece content_length_header = (*headers)["content-length"]; |
+ vector<string> values = |
+ base::SplitString(content_length_header, base::StringPiece("\0", 1), |
+ base::TRIM_WHITESPACE, base::SPLIT_WANT_ALL); |
+ for (const string& value : values) { |
+ int64_t new_value; |
+ if (!base::StringToInt64(value, &new_value) || new_value < 0) { |
+ DLOG(ERROR) << "Content length was either unparseable or negative."; |
+ return false; |
+ } |
+ if (*content_length < 0) { |
+ *content_length = new_value; |
+ continue; |
+ } |
+ if (new_value != *content_length) { |
+ DLOG(ERROR) << "Parsed content length " << new_value << " is " |
+ << "inconsistent with previously detected content length " |
+ << *content_length; |
+ return false; |
} |
} |
return true; |
@@ -139,7 +145,8 @@ bool SpdyUtils::CopyAndValidateHeaders(const QuicHeaderList& header_list, |
headers->AppendValueOrAddHeader(name, p.second); |
} |
- if (!ExtractContentLengthFromHeaders(content_length, headers)) { |
+ if (ContainsKey(*headers, "content-length") && |
+ !ExtractContentLengthFromHeaders(content_length, headers)) { |
return false; |
} |