From 64868e7213ecdc7df7cde7b3d41535422643fb28 Mon Sep 17 00:00:00 2001 From: Astro Date: Mon, 5 May 2025 03:11:11 -0400 Subject: [PATCH] Driver: Update the head and tail offsets returned from decrypt_*_in_place(). (#281) * Correct the head and tail offsets returned from decrypt_*_in_place(). * Incorporate formatting changes from `cargo make ready` --- src/driver/crypto.rs | 36 ++++++++++++++---------------------- 1 file changed, 14 insertions(+), 22 deletions(-) diff --git a/src/driver/crypto.rs b/src/driver/crypto.rs index 3cecb22..36c4be3 100644 --- a/src/driver/crypto.rs +++ b/src/driver/crypto.rs @@ -407,19 +407,19 @@ impl Cipher { 0 }; - let (mut start_estimate, end) = self.decrypt_pkt_in_place(packet, plain_bytes)?; + let (_, end) = self.decrypt_pkt_in_place(packet, plain_bytes)?; // Update the start estimate to account for bytes occupied by extension headers. - if has_extension { - let packet = packet.packet(); - if let Some((_, exts_and_opus)) = split_at_checked(packet, start_estimate) { - let extension = RtpExtensionPacket::new(exts_and_opus) - .ok_or(InternalError::IllegalVoicePacket)?; - start_estimate += extension.packet().len() - extension.payload().len(); - } - } + let payload_offset = if has_extension { + let payload = packet.payload(); + let extension = + RtpExtensionPacket::new(payload).ok_or(InternalError::IllegalVoicePacket)?; + extension.packet().len() - extension.payload().len() + } else { + 0 + }; - Ok((start_estimate, end)) + Ok((payload_offset, end)) } #[cfg(feature = "receive")] @@ -484,23 +484,15 @@ impl Cipher { }, } - Ok((plaintext_end + pre_payload.len(), post_payload.len())) + Ok(( + plaintext_end + pre_payload.len(), + post_payload.len() + slice_to_use.len(), + )) } } // Temporary functions -- MSRV is ostensibly 1.74, slice::split_at(_mut)_checked is 1.80+. // TODO: Remove in v0.5+ with MSRV bump to 1.81+. -#[cfg(any(feature = "receive", test))] -#[inline] -#[must_use] -const fn split_at_checked(els: &[u8], mid: usize) -> Option<(&[u8], &[u8])> { - if mid <= els.len() { - Some(els.split_at(mid)) - } else { - None - } -} - #[cfg(any(feature = "receive", test))] #[inline] #[must_use]