diff options
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( |