gfe-relnote: Close the connection if a STOP_WAITING frame is received in v44 or above. Protected by gfe2_reloadable_flag_quic_do_not_accept_stop_waiting. PiperOrigin-RevId: 246399630 Change-Id: I9a810abb4d409f114f3e565ae6c5a37551073f6c
diff --git a/quic/core/quic_framer.cc b/quic/core/quic_framer.cc index 67d32e3..3553628 100644 --- a/quic/core/quic_framer.cc +++ b/quic/core/quic_framer.cc
@@ -21,6 +21,7 @@ #include "net/third_party/quiche/src/quic/core/quic_constants.h" #include "net/third_party/quiche/src/quic/core/quic_data_reader.h" #include "net/third_party/quiche/src/quic/core/quic_data_writer.h" +#include "net/third_party/quiche/src/quic/core/quic_error_codes.h" #include "net/third_party/quiche/src/quic/core/quic_socket_address_coder.h" #include "net/third_party/quiche/src/quic/core/quic_stream_frame_data_producer.h" #include "net/third_party/quiche/src/quic/core/quic_types.h" @@ -2731,6 +2732,12 @@ } case STOP_WAITING_FRAME: { + if (GetQuicReloadableFlag(quic_do_not_accept_stop_waiting) && + version_.transport_version >= QUIC_VERSION_44) { + QUIC_RELOADABLE_FLAG_COUNT(quic_do_not_accept_stop_waiting); + set_detailed_error("STOP WAITING not supported in version 44+."); + return RaiseError(QUIC_INVALID_STOP_WAITING_DATA); + } QuicStopWaitingFrame stop_waiting_frame; if (!ProcessStopWaitingFrame(reader, header, &stop_waiting_frame)) { return RaiseError(QUIC_INVALID_STOP_WAITING_DATA);
diff --git a/quic/core/quic_framer_test.cc b/quic/core/quic_framer_test.cc index a717168..3c0b66d 100644 --- a/quic/core/quic_framer_test.cc +++ b/quic/core/quic_framer_test.cc
@@ -4097,6 +4097,15 @@ std::unique_ptr<QuicEncryptedPacket> encrypted( AssemblePacketFromFragments(fragments)); + if (GetQuicReloadableFlag(quic_do_not_accept_stop_waiting) && + version_.transport_version >= QUIC_VERSION_44) { + EXPECT_FALSE(framer_.ProcessPacket(*encrypted)); + EXPECT_EQ(QUIC_INVALID_STOP_WAITING_DATA, framer_.error()); + EXPECT_EQ("STOP WAITING not supported in version 44+.", + framer_.detailed_error()); + return; + } + EXPECT_TRUE(framer_.ProcessPacket(*encrypted)); EXPECT_EQ(QUIC_NO_ERROR, framer_.error()); @@ -4114,7 +4123,9 @@ } TEST_P(QuicFramerTest, InvalidNewStopWaitingFrame) { - if (version_.transport_version == QUIC_VERSION_99) { + if (version_.transport_version == QUIC_VERSION_99 || + (GetQuicReloadableFlag(quic_do_not_accept_stop_waiting) && + version_.transport_version >= QUIC_VERSION_44)) { return; } SetDecrypterLevel(ENCRYPTION_FORWARD_SECURE);