From 2c56eef4056a2b038f4b7c8fa0505fd44a3b07ac Mon Sep 17 00:00:00 2001 From: Martin Thomson Date: Tue, 21 Nov 2017 11:48:30 +1100 Subject: Bug 1413786 - Ignore parse errors for encrypted handshake message, a=bustage --- gtests/ssl_gtest/tls_filter.cc | 6 ++++-- gtests/ssl_gtest/tls_filter.h | 3 +++ 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/gtests/ssl_gtest/tls_filter.cc b/gtests/ssl_gtest/tls_filter.cc index a05cbb8bc..6706d2252 100644 --- a/gtests/ssl_gtest/tls_filter.cc +++ b/gtests/ssl_gtest/tls_filter.cc @@ -303,6 +303,7 @@ PacketFilter::Action TlsHandshakeFilter::FilterRecord( preceding_fragment_.Assign(handshake); continue; } + preceding_fragment_.Truncate(0); DataBuffer filtered; PacketFilter::Action action = FilterHandshake(header, handshake, &filtered); @@ -350,13 +351,14 @@ bool TlsHandshakeFilter::HandshakeHeader::ReadLength( } message_seq_ = message_seq_tmp; - uint32_t offset; + uint32_t offset = 0; if (!parser->Read(&offset, 3)) { return false; } // We only parse if the fragments are all complete and in order. if (offset != expected_offset) { - ADD_FAILURE() << "Received out of order handshake fragments"; + EXPECT_NE(0U, header.epoch()) + << "Received out of order handshake fragment for epoch 0"; return false; } diff --git a/gtests/ssl_gtest/tls_filter.h b/gtests/ssl_gtest/tls_filter.h index 3e7c8d3a4..5bd804f18 100644 --- a/gtests/ssl_gtest/tls_filter.h +++ b/gtests/ssl_gtest/tls_filter.h @@ -50,6 +50,9 @@ class TlsRecordHeader : public TlsVersioned { uint8_t content_type() const { return content_type_; } uint64_t sequence_number() const { return sequence_number_; } + uint16_t epoch() const { + return static_cast(sequence_number_ >> 48); + } size_t header_length() const { return is_dtls() ? 13 : 5; } // Parse the header; return true if successful; body in an outparam if OK. -- cgit v1.2.1