Index: net/spdy/spdy_session.cc |
diff --git a/net/spdy/spdy_session.cc b/net/spdy/spdy_session.cc |
index 26b6a108b136f32026197e8e7d5a648499f31144..093ea93027482ea28d2fce1f3c3794d76fbe2959 100644 |
--- a/net/spdy/spdy_session.cc |
+++ b/net/spdy/spdy_session.cc |
@@ -1122,8 +1122,16 @@ void SpdySession::OnControl(const spdy::SpdyControlFrame* frame) { |
uint32 type = frame->type(); |
if (type == spdy::SYN_STREAM || type == spdy::SYN_REPLY) { |
if (!spdy_framer_.ParseHeaderBlock(frame, headers.get())) { |
- LOG(WARNING) << "Could not parse Spdy Control Frame Header"; |
- // TODO(mbelshe): Error the session? |
+ LOG(WARNING) << "Could not parse Spdy Control Frame Header."; |
+ int stream_id = 0; |
+ if (type == spdy::SYN_STREAM) |
+ stream_id = (reinterpret_cast<const spdy::SpdySynStreamControlFrame*> |
+ (frame))->stream_id(); |
+ if (type == spdy::SYN_REPLY) |
+ stream_id = (reinterpret_cast<const spdy::SpdySynReplyControlFrame*> |
+ (frame))->stream_id(); |
+ if(IsStreamActive(stream_id)) |
+ ResetStream(stream_id, spdy::PROTOCOL_ERROR); |
return; |
} |
} |