In QUIC, prevent applications from looking up stream_map_ directly. Instead, a new method GetActiveStream() is exposed. No behavior change. not protected. PiperOrigin-RevId: 322685603 Change-Id: Id354bc418bd6634439e188e1247f40a3ce1727d3
diff --git a/quic/core/http/quic_spdy_client_session_base.cc b/quic/core/http/quic_spdy_client_session_base.cc index 3050989..9bd7695 100644 --- a/quic/core/http/quic_spdy_client_session_base.cc +++ b/quic/core/http/quic_spdy_client_session_base.cc
@@ -177,9 +177,9 @@ QuicSpdyStream* QuicSpdyClientSessionBase::GetPromisedStream( const QuicStreamId id) { - StreamMap::iterator it = stream_map().find(id); - if (it != stream_map().end()) { - return static_cast<QuicSpdyStream*>(it->second.get()); + QuicStream* stream = GetActiveStream(id); + if (stream != nullptr) { + return static_cast<QuicSpdyStream*>(stream); } return nullptr; }
diff --git a/quic/core/quic_session.cc b/quic/core/quic_session.cc index a6286cc..d13166e 100644 --- a/quic/core/quic_session.cc +++ b/quic/core/quic_session.cc
@@ -2069,6 +2069,14 @@ return nullptr; } +QuicStream* QuicSession::GetActiveStream(QuicStreamId id) const { + auto stream = stream_map_.find(id); + if (stream != stream_map_.end() && !stream->second->is_static()) { + return stream->second.get(); + } + return nullptr; +} + bool QuicSession::OnFrameAcked(const QuicFrame& frame, QuicTime::Delta ack_delay_time, QuicTime receive_timestamp) {
diff --git a/quic/core/quic_session.h b/quic/core/quic_session.h index db8c55f..635ffa9 100644 --- a/quic/core/quic_session.h +++ b/quic/core/quic_session.h
@@ -645,6 +645,11 @@ connection()->SetLossDetectionTuner(std::move(tuner)); } + // Find stream with |id|, returns nullptr if the stream does not exist or + // closed. static streams and zombie streams are not considered active + // streams. + QuicStream* GetActiveStream(QuicStreamId id) const; + private: friend class test::QuicSessionPeer;