Allow `QuicConnectionMigrationManager::path_context_factory_` to be nullable. If `path_context_factory` is null, no connection migration will be performed.
Fix a UBSAN:
`third_party/quic/core/http/quic_spdy_client_session_with_migration.cc:23:65: runtime error: null pointer passed as argument 5, which is declared to never be null
third_party/quic/core/http/quic_connection_migration_manager.h:175:31`
PiperOrigin-RevId: 819810568
diff --git a/quiche/quic/core/http/quic_connection_migration_manager.cc b/quiche/quic/core/http/quic_connection_migration_manager.cc
index d62594e..bf116f6 100644
--- a/quiche/quic/core/http/quic_connection_migration_manager.cc
+++ b/quiche/quic/core/http/quic_connection_migration_manager.cc
@@ -204,7 +204,7 @@
QuicSpdyClientSessionWithMigration* absl_nonnull session,
const quic::QuicClock* absl_nonnull clock,
QuicNetworkHandle default_network, QuicNetworkHandle current_network,
- QuicPathContextFactory* absl_nonnull path_context_factory,
+ QuicPathContextFactory* absl_nullable path_context_factory,
const QuicConnectionMigrationConfig& config)
: session_(session),
connection_(session->connection()),
diff --git a/quiche/quic/core/http/quic_connection_migration_manager.h b/quiche/quic/core/http/quic_connection_migration_manager.h
index 2bab3ea..4a29328 100644
--- a/quiche/quic/core/http/quic_connection_migration_manager.h
+++ b/quiche/quic/core/http/quic_connection_migration_manager.h
@@ -168,11 +168,13 @@
// network or port.
class QUICHE_EXPORT QuicConnectionMigrationManager {
public:
+ // `path_context_factory` can be nullptr, in which case no migration will be
+ // performed regardless of the migration `config`.
QuicConnectionMigrationManager(
QuicSpdyClientSessionWithMigration* absl_nonnull session,
const quic::QuicClock* absl_nonnull clock,
QuicNetworkHandle default_network, QuicNetworkHandle current_network,
- QuicPathContextFactory* absl_nonnull path_context_factory,
+ QuicPathContextFactory* absl_nullable path_context_factory,
const QuicConnectionMigrationConfig& config);
~QuicConnectionMigrationManager();
@@ -368,7 +370,8 @@
QuicNetworkHandle default_network_;
// Stores the network interface that is currently used by the connection.
QuicNetworkHandle current_network_;
- QuicPathContextFactory* absl_nonnull path_context_factory_;
+ // Nullptr if no migration is allowed.
+ QuicPathContextFactory* absl_nullable path_context_factory_;
// Not owned.
QuicConnectionMigrationDebugVisitor* absl_nullable debug_visitor_ = nullptr;
const QuicConnectionMigrationConfig config_;