Add more protection in QuicSpdySession::GetSpdyDataStream().

From the definition of GetOrCreateDynamicStream(), it's possible that the returned stream is a static non-spdy stream.
So instead of using DCHECK as invariants, I think it'd be better if we close connection here.

gfe-relnote: Protected by gfe2_reloadable_flag_quic_handle_staticness_when_getting_spdy_stream
PiperOrigin-RevId: 257486450
Change-Id: I7ac6c4b6f9e78ff263ee0937c647bbfb35de4e22
diff --git a/quic/core/http/quic_spdy_session.cc b/quic/core/http/quic_spdy_session.cc
index 9e4178f..e264f3d 100644
--- a/quic/core/http/quic_spdy_session.cc
+++ b/quic/core/http/quic_spdy_session.cc
@@ -560,6 +560,15 @@
 QuicSpdyStream* QuicSpdySession::GetSpdyDataStream(
     const QuicStreamId stream_id) {
   QuicStream* stream = GetOrCreateDynamicStream(stream_id);
+  if (GetQuicReloadableFlag(quic_handle_staticness_for_spdy_stream) && stream &&
+      stream->is_static()) {
+    QUIC_RELOADABLE_FLAG_COUNT(quic_handle_staticness_for_spdy_stream);
+    QUIC_BUG << "GetSpdyDataStream returns static stream";
+    connection()->CloseConnection(
+        QUIC_INVALID_STREAM_ID, "stream is static",
+        ConnectionCloseBehavior::SEND_CONNECTION_CLOSE_PACKET);
+    return nullptr;
+  }
   DCHECK(!stream || !stream->is_static());
   return static_cast<QuicSpdyStream*>(stream);
 }