Do not use iterators in ParsedQuicVersionIsValid This CL fixes a Chrome merge. The issue is that Chrome uses C++14 whereas g3 uses C++17, and std::array::begin() is only constexpr starting in C++17. gfe-relnote: n/a, no behavior change PiperOrigin-RevId: 301399514 Change-Id: I2a86e234950d35ff6022285eb592cbd4576881f8
diff --git a/quic/core/quic_versions.h b/quic/core/quic_versions.h index bf6c39b..8739326 100644 --- a/quic/core/quic_versions.h +++ b/quic/core/quic_versions.h
@@ -172,7 +172,10 @@ transport_version == QUIC_VERSION_UNSUPPORTED || transport_version == QUIC_VERSION_RESERVED_FOR_NEGOTIATION; if (!transport_version_is_valid) { - for (QuicTransportVersion trans_vers : SupportedTransportVersions()) { + // Iterators are not constexpr in C++14 which Chrome uses. + constexpr auto supported_transport_versions = SupportedTransportVersions(); + for (size_t i = 0; i < supported_transport_versions.size(); ++i) { + const QuicTransportVersion& trans_vers = supported_transport_versions[i]; if (trans_vers == transport_version) { transport_version_is_valid = true; break;
diff --git a/quic/core/quic_versions_test.cc b/quic/core/quic_versions_test.cc index 851619f..216b080 100644 --- a/quic/core/quic_versions_test.cc +++ b/quic/core/quic_versions_test.cc
@@ -70,6 +70,17 @@ EXPECT_TRUE(reserved.IsKnown()); EXPECT_TRUE(ParsedQuicVersionIsValid(reserved.handshake_protocol, reserved.transport_version)); + // Check that invalid combinations are not valid. + EXPECT_FALSE(ParsedQuicVersionIsValid(PROTOCOL_TLS1_3, QUIC_VERSION_43)); + EXPECT_FALSE(ParsedQuicVersionIsValid(PROTOCOL_QUIC_CRYPTO, + QUIC_VERSION_IETF_DRAFT_27)); + // Check that deprecated versions are not valid. + EXPECT_FALSE(ParsedQuicVersionIsValid(PROTOCOL_QUIC_CRYPTO, + static_cast<QuicTransportVersion>(33))); + EXPECT_FALSE(ParsedQuicVersionIsValid(PROTOCOL_QUIC_CRYPTO, + static_cast<QuicTransportVersion>(99))); + EXPECT_FALSE(ParsedQuicVersionIsValid(PROTOCOL_TLS1_3, + static_cast<QuicTransportVersion>(99))); } TEST_F(QuicVersionsTest, QuicVersionLabelToQuicTransportVersion) {