summaryrefslogtreecommitdiffstats
path: root/net/spdy/spdy_session.cc
diff options
context:
space:
mode:
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(