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

Unified Diff: net/spdy/spdy_framer.cc

Issue 681713002: Update from chromium https://crrev.com/301315 (Closed) Base URL: https://github.com/domokit/mojo.git@master
Patch Set: Created 6 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/spdy/spdy_framer.h ('k') | net/spdy/spdy_framer_test.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: net/spdy/spdy_framer.cc
diff --git a/net/spdy/spdy_framer.cc b/net/spdy/spdy_framer.cc
index fae97e8e3e53085e1c75d03da18a8f391d825d11..de7a7a360605be933c3dcfbe67489f66078e9b7c 100644
--- a/net/spdy/spdy_framer.cc
+++ b/net/spdy/spdy_framer.cc
@@ -77,6 +77,8 @@ const size_t kPadLengthFieldSize = 1;
const SpdyStreamId SpdyFramer::kInvalidStream = static_cast<SpdyStreamId>(-1);
const size_t SpdyFramer::kHeaderDataChunkMaxSize = 1024;
+// We fragment sent control frames at smaller payload boundaries.
+const size_t SpdyFramer::kMaxControlFrameSize = 1024;
// The size of the control frame buffer. Must be >= the minimum size of the
// largest control frame, which is SYN_STREAM. See GetSynStreamMinimumSize() for
// calculation details.
@@ -163,6 +165,9 @@ SpdyFramer::SpdyFramer(SpdyMajorVersion version)
end_stream_when_done_(false) {
DCHECK_GE(spdy_version_, SPDY_MIN_VERSION);
DCHECK_LE(spdy_version_, SPDY_MAX_VERSION);
+ DCHECK_LE(kMaxControlFrameSize,
+ SpdyConstants::GetFrameMaximumSize(spdy_version_) +
+ SpdyConstants::GetControlFrameHeaderSize(spdy_version_));
Reset();
}
@@ -1049,7 +1054,9 @@ void SpdyFramer::ProcessControlFrameHeader(uint16 control_frame_type_field) {
return;
}
- if (current_frame_length_ > GetControlFrameBufferMaxSize()) {
+ if (current_frame_length_ >
+ SpdyConstants::GetFrameMaximumSize(protocol_version()) +
+ SpdyConstants::GetControlFrameHeaderSize(protocol_version())) {
DLOG(WARNING) << "Received control frame with way too big of a payload: "
<< current_frame_length_;
set_error(SPDY_CONTROL_PAYLOAD_TOO_LARGE);
@@ -2158,7 +2165,7 @@ size_t SpdyFramer::ProcessDataFramePaddingLength(const char* data, size_t len) {
size_t original_len = len;
if (current_frame_flags_ & DATA_FLAG_PADDED) {
if (len != 0) {
- if (remaining_data_length_ < 1) {
+ if (remaining_data_length_ < kPadLengthFieldSize) {
set_error(SPDY_INVALID_DATA_FRAME_FLAGS);
return 0;
}
@@ -2659,7 +2666,7 @@ SpdySerializedFrame* SpdyFramer::SerializeHeaders(
headers.name_value_block(), &hpack_encoding);
}
size += hpack_encoding.size();
- if (size > GetHeaderFragmentMaxSize()) {
+ if (size > kMaxControlFrameSize) {
size += GetNumberRequiredContinuationFrames(size) *
GetContinuationMinimumSize();
flags &= ~HEADERS_FLAG_END_HEADERS;
@@ -2767,7 +2774,7 @@ SpdyFrame* SpdyFramer::SerializePushPromise(
push_promise.name_value_block(), &hpack_encoding);
}
size += hpack_encoding.size();
- if (size > GetHeaderFragmentMaxSize()) {
+ if (size > kMaxControlFrameSize) {
size += GetNumberRequiredContinuationFrames(size) *
GetContinuationMinimumSize();
flags &= ~PUSH_PROMISE_FLAG_END_PUSH_PROMISE;
@@ -2965,7 +2972,6 @@ size_t SpdyFramer::GetSerializedLength(const SpdyHeaderBlock& headers) {
}
size_t SpdyFramer::GetNumberRequiredContinuationFrames(size_t size) {
- const size_t kMaxControlFrameSize = GetHeaderFragmentMaxSize();
DCHECK_GT(protocol_version(), SPDY3);
DCHECK_GT(size, kMaxControlFrameSize);
size_t overflow = size - kMaxControlFrameSize;
@@ -2977,8 +2983,6 @@ void SpdyFramer::WritePayloadWithContinuation(SpdyFrameBuilder* builder,
SpdyStreamId stream_id,
SpdyFrameType type,
int padding_payload_len) {
- const size_t kMaxControlFrameSize = GetHeaderFragmentMaxSize();
-
uint8 end_flag = 0;
uint8 flags = 0;
if (type == HEADERS) {
« no previous file with comments | « net/spdy/spdy_framer.h ('k') | net/spdy/spdy_framer_test.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698