summaryrefslogtreecommitdiffstats
path: root/net/spdy/spdy_session.cc
diff options
context:
space:
mode:
authormlloyd@chromium.org <mlloyd@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2010-06-24 19:17:58 +0000
committermlloyd@chromium.org <mlloyd@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2010-06-24 19:17:58 +0000
commitd3002235bebf6df780b2425b1fb7606e0c033974 (patch)
tree975213da7aa0cec04384b8ca8749ade535f749f2 /net/spdy/spdy_session.cc
parent955f0ffae85be445f114f5ab6f729ad65e25dc28 (diff)
downloadchromium_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.cc15
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(