| Index: net/spdy/spdy_framer.cc
|
| diff --git a/net/spdy/spdy_framer.cc b/net/spdy/spdy_framer.cc
|
| index 3ee66bc195b0c0bb7afc1b3909ca33e1b7315586..c0f214cb15d0db883431c22d3e4fc6bc88e25d02 100644
|
| --- a/net/spdy/spdy_framer.cc
|
| +++ b/net/spdy/spdy_framer.cc
|
| @@ -634,13 +634,22 @@ size_t SpdyFramer::ProcessCommonHeader(const char* data, size_t len) {
|
| DCHECK(successful_read);
|
| is_control_frame = (version & kControlFlagMask) != 0;
|
| version &= ~kControlFlagMask; // Only valid for control frames.
|
| - if (is_control_frame &&
|
| - version >= SpdyConstants::SerializeMajorVersion(SPDY_MIN_VERSION) &&
|
| - version <= SpdyConstants::SerializeMajorVersion(SPDY_MAX_VERSION)) {
|
| - version = SpdyConstants::ParseMajorVersion(version);
|
| - }
|
| -
|
| if (is_control_frame) {
|
| + // We check version before we check validity: version can never be
|
| + // 'invalid', it can only be unsupported.
|
| + if (version < SpdyConstants::SerializeMajorVersion(SPDY_MIN_VERSION) ||
|
| + version > SpdyConstants::SerializeMajorVersion(SPDY_MAX_VERSION) ||
|
| + SpdyConstants::ParseMajorVersion(version) != protocol_version()) {
|
| + // Version does not match the version the framer was initialized with.
|
| + DVLOG(1) << "Unsupported SPDY version "
|
| + << version
|
| + << " (expected " << protocol_version() << ")";
|
| + set_error(SPDY_UNSUPPORTED_VERSION);
|
| + return 0;
|
| + } else {
|
| + // Convert version from wire format to SpdyMajorVersion.
|
| + version = SpdyConstants::ParseMajorVersion(version);
|
| + }
|
| // We check control_frame_type_field's validity in
|
| // ProcessControlFrameHeader().
|
| successful_read = reader->ReadUInt16(&control_frame_type_field);
|
| @@ -756,13 +765,6 @@ size_t SpdyFramer::ProcessCommonHeader(const char* data, size_t len) {
|
| CHANGE_STATE(SPDY_AUTO_RESET);
|
| }
|
| }
|
| - } else if (version != protocol_version()) {
|
| - // We check version before we check validity: version can never be
|
| - // 'invalid', it can only be unsupported.
|
| - DVLOG(1) << "Unsupported SPDY version "
|
| - << version
|
| - << " (expected " << protocol_version() << ")";
|
| - set_error(SPDY_UNSUPPORTED_VERSION);
|
| } else {
|
| ProcessControlFrameHeader(control_frame_type_field);
|
| }
|
|
|