diff options
author | mlloyd@chromium.org <mlloyd@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2010-06-24 19:17:58 +0000 |
---|---|---|
committer | mlloyd@chromium.org <mlloyd@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2010-06-24 19:17:58 +0000 |
commit | d3002235bebf6df780b2425b1fb7606e0c033974 (patch) | |
tree | 975213da7aa0cec04384b8ca8749ade535f749f2 /net/spdy/spdy_session.cc | |
parent | 955f0ffae85be445f114f5ab6f729ad65e25dc28 (diff) | |
download | chromium_src-d3002235bebf6df780b2425b1fb7606e0c033974.zip chromium_src-d3002235bebf6df780b2425b1fb7606e0c033974.tar.gz chromium_src-d3002235bebf6df780b2425b1fb7606e0c033974.tar.bz2 |
Ignore duplicate SYN_REPLYs on the same stream. Added a unit test.
BUG=45639
TEST=Added unit test, which caused an ASSERT fail before but now passes.
Review URL: http://codereview.chromium.org/2871015
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@50751 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'net/spdy/spdy_session.cc')
-rwxr-xr-x[-rw-r--r--] | net/spdy/spdy_session.cc | 15 |
1 files changed, 11 insertions, 4 deletions
diff --git a/net/spdy/spdy_session.cc b/net/spdy/spdy_session.cc index 3795bc1..4910646 100644..100755 --- a/net/spdy/spdy_session.cc +++ b/net/spdy/spdy_session.cc @@ -949,6 +949,17 @@ void SpdySession::OnSynReply(const spdy::SpdySynReplyControlFrame& frame, LOG(INFO) << "SPDY SYN_REPLY RESPONSE HEADERS for stream: " << stream_id; DumpSpdyHeaders(*headers); + scoped_refptr<SpdyStream> stream = active_streams_[stream_id]; + CHECK_EQ(stream->stream_id(), stream_id); + CHECK(!stream->cancelled()); + + if (stream->syn_reply_received()) { + LOG(WARNING) << "Received duplicate SYN_REPLY for stream " << stream_id; + CloseStream(stream->stream_id(), ERR_SPDY_PROTOCOL_ERROR); + return; + } + stream->set_syn_reply_received(); + // We record content declared as being pushed so that we don't // request a duplicate stream which is already scheduled to be // sent to us. @@ -977,10 +988,6 @@ void SpdySession::OnSynReply(const spdy::SpdySynReplyControlFrame& frame, } while (start < content.length()); } - scoped_refptr<SpdyStream> stream = active_streams_[stream_id]; - CHECK_EQ(stream->stream_id(), stream_id); - CHECK(!stream->cancelled()); - const BoundNetLog& log = stream->net_log(); if (log.HasListener()) { log.AddEvent( |