gfe-relnote: Fix invalid downcast. QuicTransportServerSessionTest fails on UBSAN builds in Chromium, see https://crrev.com/c/2015242. QuicTransportServerSession initializes |crypto_stream_| in the constructor using CreateCryptoServerStream(), which since cr/290819354 might return a TlsServerHandshaker, which is a derived class of QuicCryptoServerStreamBase but not of QuicCryptoServerStream. Hence the downcast fails in QuicTransportServerSessionTest constructor. Fortunately QuicTransportServerSessionTest does not need a QuicCryptoServerStream, only a QuicCryptoServerStreamBase: it calls OnSuccessfulVersionNegotiation() which is a QuicCryptoStream method, and passes it to HandshakeWithFakeClient() which takes a QuicCryptoServerStreamBase*. PiperOrigin-RevId: 291203032 Change-Id: I7b3ec41c64eeb46074ee6aa98bff7bd132a20daa
diff --git a/quic/quic_transport/quic_transport_server_session.h b/quic/quic_transport/quic_transport_server_session.h index c023264..e756360 100644 --- a/quic/quic_transport/quic_transport_server_session.h +++ b/quic/quic_transport/quic_transport_server_session.h
@@ -51,10 +51,10 @@ bool ShouldKeepConnectionAlive() const override { return true; } - QuicCryptoStream* GetMutableCryptoStream() override { + QuicCryptoServerStreamBase* GetMutableCryptoStream() override { return crypto_stream_.get(); } - const QuicCryptoStream* GetCryptoStream() const override { + const QuicCryptoServerStreamBase* GetCryptoStream() const override { return crypto_stream_.get(); }
diff --git a/quic/quic_transport/quic_transport_server_session_test.cc b/quic/quic_transport/quic_transport_server_session_test.cc index f74fb53..2f0a0e8 100644 --- a/quic/quic_transport/quic_transport_server_session_test.cc +++ b/quic/quic_transport/quic_transport_server_session_test.cc
@@ -74,8 +74,7 @@ &connection_, nullptr, DefaultQuicConfig(), GetVersions(), &crypto_config_, &compressed_certs_cache_, &visitor_); session_->Initialize(); - crypto_stream_ = static_cast<QuicCryptoServerStream*>( - session_->GetMutableCryptoStream()); + crypto_stream_ = session_->GetMutableCryptoStream(); if (!GetQuicReloadableFlag(quic_version_negotiated_by_default_at_server)) { crypto_stream_->OnSuccessfulVersionNegotiation(GetVersions()[0]); } @@ -130,7 +129,7 @@ std::unique_ptr<QuicTransportServerSession> session_; QuicCompressedCertsCache compressed_certs_cache_; testing::NiceMock<MockServerVisitor> visitor_; - QuicCryptoServerStream* crypto_stream_; + QuicCryptoServerStreamBase* crypto_stream_; GURL path_; };