Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1046)

Unified Diff: net/quic/core/spdy_utils.cc

Issue 2385323004: relnote: change ExtractContentLengthFromHeaders to return false if content-length is missing. If th… (Closed)
Patch Set: fix test Created 4 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « net/quic/core/spdy_utils.h ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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;
}
« no previous file with comments | « net/quic/core/spdy_utils.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698