diff --git a/rustls/src/conn/unbuffered.rs b/rustls/src/conn/unbuffered.rs index 99d95e9ee6..d3780dd4f5 100644 --- a/rustls/src/conn/unbuffered.rs +++ b/rustls/src/conn/unbuffered.rs @@ -80,7 +80,13 @@ impl UnbufferedConnectionCommon { ); } - let deframer_output = + let deframer_output = if self + .core + .common_state + .has_received_close_notify + { + None + } else { match self .core .deframe(None, buffer.filled_mut(), &mut buffer_progress) @@ -93,7 +99,8 @@ impl UnbufferedConnectionCommon { }; } Ok(r) => r, - }; + } + }; if let Some(msg) = deframer_output { let mut state = diff --git a/rustls/tests/unbuffered.rs b/rustls/tests/unbuffered.rs index 3942e2fd7f..86d575028f 100644 --- a/rustls/tests/unbuffered.rs +++ b/rustls/tests/unbuffered.rs @@ -547,40 +547,49 @@ fn full_closure_server_to_client() { #[test] fn junk_after_close_notify_received() { // cf. test_junk_after_close_notify_received in api.rs - let mut outcome = handshake(&rustls::version::TLS13); - let mut client = outcome.client.take().unwrap(); - let mut server = outcome.server.take().unwrap(); - let mut client_send_buf = [0u8; 128]; - let mut len = dbg!( - write_traffic( - client.process_tls_records(&mut []), - |mut wt: WriteTraffic<_>| wt.queue_close_notify(&mut client_send_buf), - ) - .unwrap() - ); + // various junk data to test with + const JUNK_DATA: &[&[u8]] = &[ + &[0x17, 0x03, 0x03, 0x01], + &[11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25], + ]; - client_send_buf[len..len + 4].copy_from_slice(&[0x17, 0x03, 0x03, 0x01]); - len += 4; + for junk in JUNK_DATA { + let mut outcome = handshake(&rustls::version::TLS13); + let mut client = outcome.client.take().unwrap(); + let mut server = outcome.server.take().unwrap(); - let discard = match dbg!(server.process_tls_records(dbg!(&mut client_send_buf[..len]))) { - UnbufferedStatus { - discard, - state: Ok(ConnectionState::PeerClosed), - .. - } => { - assert_eq!(discard, 24); - discard - } - st => { - panic!("unexpected server state {st:?} (wanted PeerClosed)"); - } - }; + let mut client_send_buf = [0u8; 128]; + let mut len = dbg!( + write_traffic( + client.process_tls_records(&mut []), + |mut wt: WriteTraffic<_>| wt.queue_close_notify(&mut client_send_buf), + ) + .unwrap() + ); - // further data in client_send_buf is ignored - let UnbufferedStatus { discard, .. } = - server.process_tls_records(dbg!(&mut client_send_buf[discard..len])); - assert_eq!(discard, 0); + client_send_buf[len..len + junk.len()].copy_from_slice(junk); + len += junk.len(); + + let discard = match dbg!(server.process_tls_records(dbg!(&mut client_send_buf[..len]))) { + UnbufferedStatus { + discard, + state: Ok(ConnectionState::PeerClosed), + .. + } => { + assert_eq!(discard, 24); + discard + } + st => { + panic!("unexpected server state {st:?} (wanted PeerClosed)"); + } + }; + + // further data in client_send_buf is ignored + let UnbufferedStatus { discard, .. } = + server.process_tls_records(dbg!(&mut client_send_buf[discard..len])); + assert_eq!(discard, 0); + } } #[test] pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy