Add some QUIC DCHECKs These assumptions were found when trying to debug crbug/1117201 Debug-only change PiperOrigin-RevId: 328638627 Change-Id: Ic563044d9e5d7be8965a62b126215c066d0b400f
diff --git a/quic/core/quic_connection.cc b/quic/core/quic_connection.cc index c44e5cf..8b71b3a 100644 --- a/quic/core/quic_connection.cc +++ b/quic/core/quic_connection.cc
@@ -65,6 +65,7 @@ void OnAlarm() override { DCHECK(connection_->ack_frame_updated()); + DCHECK(connection_->connected()); QuicConnection::ScopedPacketFlusher flusher(connection_); if (connection_->SupportsMultiplePacketNumberSpaces()) { connection_->SendAllPendingAcks(); @@ -88,7 +89,10 @@ RetransmissionAlarmDelegate& operator=(const RetransmissionAlarmDelegate&) = delete; - void OnAlarm() override { connection_->OnRetransmissionTimeout(); } + void OnAlarm() override { + DCHECK(connection_->connected()); + connection_->OnRetransmissionTimeout(); + } private: QuicConnection* connection_; @@ -103,7 +107,10 @@ SendAlarmDelegate(const SendAlarmDelegate&) = delete; SendAlarmDelegate& operator=(const SendAlarmDelegate&) = delete; - void OnAlarm() override { connection_->WriteAndBundleAcksIfNotBlocked(); } + void OnAlarm() override { + DCHECK(connection_->connected()); + connection_->WriteAndBundleAcksIfNotBlocked(); + } private: QuicConnection* connection_; @@ -116,7 +123,10 @@ PingAlarmDelegate(const PingAlarmDelegate&) = delete; PingAlarmDelegate& operator=(const PingAlarmDelegate&) = delete; - void OnAlarm() override { connection_->OnPingTimeout(); } + void OnAlarm() override { + DCHECK(connection_->connected()); + connection_->OnPingTimeout(); + } private: QuicConnection* connection_; @@ -130,7 +140,10 @@ MtuDiscoveryAlarmDelegate& operator=(const MtuDiscoveryAlarmDelegate&) = delete; - void OnAlarm() override { connection_->DiscoverMtu(); } + void OnAlarm() override { + DCHECK(connection_->connected()); + connection_->DiscoverMtu(); + } private: QuicConnection* connection_; @@ -146,6 +159,7 @@ const ProcessUndecryptablePacketsAlarmDelegate&) = delete; void OnAlarm() override { + DCHECK(connection_->connected()); QuicConnection::ScopedPacketFlusher flusher(connection_); connection_->MaybeProcessUndecryptablePackets(); }
diff --git a/quic/core/quic_packet_creator.cc b/quic/core/quic_packet_creator.cc index fb574fc..bfced90 100644 --- a/quic/core/quic_packet_creator.cc +++ b/quic/core/quic_packet_creator.cc
@@ -1619,6 +1619,13 @@ } } + // If this is an ACK frame, validate that it is non-empty and that + // largest_acked matches the max packet number. + DCHECK(frame.type != ACK_FRAME || + (!frame.ack_frame->packets.Empty() && + frame.ack_frame->packets.Max() == frame.ack_frame->largest_acked)) + << "Invalid ACK frame: " << frame; + size_t frame_len = GetSerializedFrameLength(frame); if (frame_len == 0 && RemoveSoftMaxPacketLength()) { // Remove soft max_packet_length and retry. @@ -1977,5 +1984,13 @@ creator_->SetDefaultPeerAddress(old_peer_address_); } +void QuicPacketCreator::set_encryption_level(EncryptionLevel level) { + DCHECK(level == packet_.encryption_level || !HasPendingFrames()) + << "Cannot update encryption level from " << packet_.encryption_level + << " to " << level << " when we already have pending frames: " + << QuicFramesToString(queued_frames_); + packet_.encryption_level = level; +} + #undef ENDPOINT // undef for jumbo builds } // namespace quic
diff --git a/quic/core/quic_packet_creator.h b/quic/core/quic_packet_creator.h index 2c1ff57..5edcff3 100644 --- a/quic/core/quic_packet_creator.h +++ b/quic/core/quic_packet_creator.h
@@ -282,9 +282,7 @@ void SetClientConnectionId(QuicConnectionId client_connection_id); // Sets the encryption level that will be applied to new packets. - void set_encryption_level(EncryptionLevel level) { - packet_.encryption_level = level; - } + void set_encryption_level(EncryptionLevel level); EncryptionLevel encryption_level() { return packet_.encryption_level; } // packet number of the last created packet, or 0 if no packets have been