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(
