Gracefully handle missing Google-specific transport parameters when using TLS
This CL also adds a few DCHECKs that helped find this issue.
gfe-relnote: specific to QUIC versions that use TLS which are disabled by flag quic_supports_tls_handshake
PiperOrigin-RevId: 241826266
Change-Id: I4baa70e8f02deafa7148a94df45f96852913de7e
diff --git a/quic/core/quic_config.cc b/quic/core/quic_config.cc
index be197de..25b549c 100644
--- a/quic/core/quic_config.cc
+++ b/quic/core/quic_config.cc
@@ -783,26 +783,29 @@
QuicErrorCode error = idle_network_timeout_seconds_.ReceiveValue(
params.idle_timeout, hello_type, error_details);
if (error != QUIC_NO_ERROR) {
+ DCHECK(!error_details->empty());
return error;
}
const CryptoHandshakeMessage* peer_params = params.google_quic_params.get();
- if (!peer_params) {
- return QUIC_CRYPTO_MESSAGE_PARAMETER_NOT_FOUND;
- }
- error =
- silent_close_.ProcessPeerHello(*peer_params, hello_type, error_details);
- if (error != QUIC_NO_ERROR) {
- return error;
- }
- error = initial_round_trip_time_us_.ProcessPeerHello(*peer_params, hello_type,
- error_details);
- if (error != QUIC_NO_ERROR) {
- return error;
- }
- error = connection_options_.ProcessPeerHello(*peer_params, hello_type,
- error_details);
- if (error != QUIC_NO_ERROR) {
- return error;
+ if (peer_params != nullptr) {
+ error =
+ silent_close_.ProcessPeerHello(*peer_params, hello_type, error_details);
+ if (error != QUIC_NO_ERROR) {
+ DCHECK(!error_details->empty());
+ return error;
+ }
+ error = initial_round_trip_time_us_.ProcessPeerHello(
+ *peer_params, hello_type, error_details);
+ if (error != QUIC_NO_ERROR) {
+ DCHECK(!error_details->empty());
+ return error;
+ }
+ error = connection_options_.ProcessPeerHello(*peer_params, hello_type,
+ error_details);
+ if (error != QUIC_NO_ERROR) {
+ DCHECK(!error_details->empty());
+ return error;
+ }
}
initial_stream_flow_control_window_bytes_.SetReceivedValue(