Change QuicCryptoServerConfig::ParseSourceAddressToken from taking a 'SourceAddressTokens*' to a 'SourceAddressTokens&'.  The function dereferences this pointer without checking for nullptr, changing it to reference prevents caller from passing in a nullptr.

IIRC, the old style guide requires output parameters to be pointers, but it has been changed to be non-const references: go/cstyle#Inputs_and_Outputs

PiperOrigin-RevId: 409498556
diff --git a/quic/core/crypto/quic_crypto_server_config.cc b/quic/core/crypto/quic_crypto_server_config.cc
index fd8041b..16a53fa 100644
--- a/quic/core/crypto/quic_crypto_server_config.cc
+++ b/quic/core/crypto/quic_crypto_server_config.cc
@@ -1247,7 +1247,7 @@
           configs.requested != nullptr ? *configs.requested : *configs.primary;
       source_address_token_error =
           ParseSourceAddressToken(*config.source_address_token_boxer, srct,
-                                  &info->source_address_tokens);
+                                  info->source_address_tokens);
 
       if (source_address_token_error == HANDSHAKE_OK) {
         source_address_token_error = ValidateSourceAddressTokens(
@@ -1754,16 +1754,15 @@
 }
 
 HandshakeFailureReason QuicCryptoServerConfig::ParseSourceAddressToken(
-    const CryptoSecretBoxer& crypto_secret_boxer,
-    absl::string_view token,
-    SourceAddressTokens* tokens) const {
+    const CryptoSecretBoxer& crypto_secret_boxer, absl::string_view token,
+    SourceAddressTokens& tokens) const {
   std::string storage;
   absl::string_view plaintext;
   if (!crypto_secret_boxer.Unbox(token, &storage, &plaintext)) {
     return SOURCE_ADDRESS_TOKEN_DECRYPTION_FAILURE;
   }
 
-  if (!tokens->ParseFromArray(plaintext.data(), plaintext.size())) {
+  if (!tokens.ParseFromArray(plaintext.data(), plaintext.size())) {
     // Some clients might still be using the old source token format so
     // attempt to parse that format.
     // TODO(rch): remove this code once the new format is ubiquitous.
@@ -1771,7 +1770,7 @@
     if (!token.ParseFromArray(plaintext.data(), plaintext.size())) {
       return SOURCE_ADDRESS_TOKEN_PARSE_FAILURE;
     }
-    *tokens->add_tokens() = token;
+    *tokens.add_tokens() = token;
   }
 
   return HANDSHAKE_OK;
diff --git a/quic/core/crypto/quic_crypto_server_config.h b/quic/core/crypto/quic_crypto_server_config.h
index d8e77e6..ca6dbe5 100644
--- a/quic/core/crypto/quic_crypto_server_config.h
+++ b/quic/core/crypto/quic_crypto_server_config.h
@@ -431,9 +431,8 @@
   // Returns HANDSHAKE_OK if |token| could be parsed, or the reason for the
   // failure.
   HandshakeFailureReason ParseSourceAddressToken(
-      const CryptoSecretBoxer& crypto_secret_boxer,
-      absl::string_view token,
-      SourceAddressTokens* tokens) const;
+      const CryptoSecretBoxer& crypto_secret_boxer, absl::string_view token,
+      SourceAddressTokens& tokens) const;
 
   // ValidateSourceAddressTokens returns HANDSHAKE_OK if the source address
   // tokens in |tokens| contain a valid and timely token for the IP address
diff --git a/quic/core/tls_server_handshaker.cc b/quic/core/tls_server_handshaker.cc
index 9d66887..bc0d361 100644
--- a/quic/core/tls_server_handshaker.cc
+++ b/quic/core/tls_server_handshaker.cc
@@ -337,7 +337,7 @@
 bool TlsServerHandshaker::ValidateAddressToken(absl::string_view token) const {
   SourceAddressTokens tokens;
   HandshakeFailureReason reason = crypto_config_->ParseSourceAddressToken(
-      crypto_config_->source_address_token_boxer(), token, &tokens);
+      crypto_config_->source_address_token_boxer(), token, tokens);
   if (reason != HANDSHAKE_OK) {
     QUIC_DLOG(WARNING) << "Failed to parse source address token: "
                        << CryptoUtils::HandshakeFailureReasonToString(reason);
diff --git a/quic/test_tools/quic_crypto_server_config_peer.cc b/quic/test_tools/quic_crypto_server_config_peer.cc
index f2fff70..edf473c 100644
--- a/quic/test_tools/quic_crypto_server_config_peer.cc
+++ b/quic/test_tools/quic_crypto_server_config_peer.cc
@@ -59,7 +59,7 @@
     CachedNetworkParameters* cached_network_params) {
   SourceAddressTokens tokens;
   HandshakeFailureReason reason = server_config_->ParseSourceAddressToken(
-      *GetConfig(config_id)->source_address_token_boxer, srct, &tokens);
+      *GetConfig(config_id)->source_address_token_boxer, srct, tokens);
   if (reason != HANDSHAKE_OK) {
     return reason;
   }
@@ -75,7 +75,7 @@
     QuicWallTime now) {
   SourceAddressTokens tokens;
   HandshakeFailureReason parse_status = server_config_->ParseSourceAddressToken(
-      *GetPrimaryConfig()->source_address_token_boxer, token, &tokens);
+      *GetPrimaryConfig()->source_address_token_boxer, token, tokens);
   if (HANDSHAKE_OK != parse_status) {
     return parse_status;
   }
diff --git a/quic/test_tools/quic_crypto_server_config_peer.h b/quic/test_tools/quic_crypto_server_config_peer.h
index a76a586..8e0e5e7 100644
--- a/quic/test_tools/quic_crypto_server_config_peer.h
+++ b/quic/test_tools/quic_crypto_server_config_peer.h
@@ -40,13 +40,10 @@
       QuicWallTime now,
       CachedNetworkParameters* cached_network_params);
 
-  // Attempts to validate the tokens in |tokens|.
+  // Attempts to validate the tokens in |srct|.
   HandshakeFailureReason ValidateSourceAddressTokens(
-      std::string config_id,
-      absl::string_view tokens,
-      const QuicIpAddress& ip,
-      QuicWallTime now,
-      CachedNetworkParameters* cached_network_params);
+      std::string config_id, absl::string_view srct, const QuicIpAddress& ip,
+      QuicWallTime now, CachedNetworkParameters* cached_network_params);
 
   // Attempts to validate the single source address token in |token|.
   HandshakeFailureReason ValidateSingleSourceAddressToken(