Internal QUICHE change

PiperOrigin-RevId: 311388198
Change-Id: Ib8712ca8b3348b98c9d7a13a170d9ddaf5e4e951
diff --git a/quic/core/quic_connection.cc b/quic/core/quic_connection.cc
index 1832092..0bae0bb 100644
--- a/quic/core/quic_connection.cc
+++ b/quic/core/quic_connection.cc
@@ -2122,6 +2122,12 @@
       // TODO(wub): Reduce max packet size to a safe default, or the actual MTU.
       mtu_discoverer_.Disable();
       mtu_discovery_alarm_->Cancel();
+      if (GetQuicReloadableFlag(
+              quic_ignore_msg_too_big_from_buffered_packets)) {
+        QUIC_RELOADABLE_FLAG_COUNT(
+            quic_ignore_msg_too_big_from_buffered_packets);
+        buffered_packets_.pop_front();
+      }
       continue;
     }
     if (IsWriteError(result.status)) {
diff --git a/quic/core/quic_connection_test.cc b/quic/core/quic_connection_test.cc
index a5a0a59..acbb1e0 100644
--- a/quic/core/quic_connection_test.cc
+++ b/quic/core/quic_connection_test.cc
@@ -2065,6 +2065,24 @@
   EXPECT_EQ(kPeerAddress, connection_.effective_peer_address());
 }
 
+// Regression test for b/150161358.
+TEST_P(QuicConnectionTest, BufferedMtuPacketTooBig) {
+  if (!GetQuicReloadableFlag(quic_ignore_msg_too_big_from_buffered_packets)) {
+    return;
+  }
+  EXPECT_CALL(visitor_, OnWriteBlocked()).Times(1);
+  writer_->SetWriteBlocked();
+
+  // Send a MTU packet while blocked. It should be buffered.
+  connection_.SendMtuDiscoveryPacket(kMaxOutgoingPacketSize);
+  EXPECT_EQ(1u, connection_.NumQueuedPackets());
+  EXPECT_TRUE(writer_->IsWriteBlocked());
+
+  writer_->AlwaysGetPacketTooLarge();
+  writer_->SetWritable();
+  connection_.OnCanWrite();
+}
+
 TEST_P(QuicConnectionTest, WriteOutOfOrderQueuedPackets) {
   // EXPECT_QUIC_BUG tests are expensive so only run one instance of them.
   if (!IsDefaultTestConfiguration()) {