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) {