Prevent crash in EncryptInPlace when the encrypter is missing I'm currently investigating exactly what can cause this crash but I believe this could happen in production so I'd rather put this fix in now as a safety measure and build a repro test shortly after. gfe-relnote: n/a, replace a crash with a QUIC_BUG PiperOrigin-RevId: 243903209 Change-Id: I14403f3ed648c56f4d197b8d36e180639237dacb
diff --git a/quic/core/quic_framer.cc b/quic/core/quic_framer.cc index 583291e..0c65dc2 100644 --- a/quic/core/quic_framer.cc +++ b/quic/core/quic_framer.cc
@@ -3940,6 +3940,14 @@ size_t buffer_len, char* buffer) { DCHECK(packet_number.IsInitialized()); + if (encrypter_[level] == nullptr) { + QUIC_BUG << ENDPOINT + << "Attempted to encrypt in place without encrypter at level " + << QuicUtils::EncryptionLevelToString(level); + RaiseError(QUIC_ENCRYPTION_FAILURE); + return 0; + } + size_t output_length = 0; if (!encrypter_[level]->EncryptPacket( packet_number.ToUint64(), @@ -3960,7 +3968,12 @@ char* buffer, size_t buffer_len) { DCHECK(packet_number.IsInitialized()); - DCHECK(encrypter_[level] != nullptr); + if (encrypter_[level] == nullptr) { + QUIC_BUG << ENDPOINT << "Attempted to encrypt without encrypter at level " + << QuicUtils::EncryptionLevelToString(level); + RaiseError(QUIC_ENCRYPTION_FAILURE); + return 0; + } QuicStringPiece associated_data = packet.AssociatedData(version_.transport_version);