From 28fe70f479fcb2f22971fc29a3b81e1cef097578 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sebastian=20Dr=C3=B6ge?= Date: Thu, 22 Feb 2024 12:12:39 +0200 Subject: [PATCH] rtpheaderextension: Don't pass a mutable output buffer reference to `write()` The extension is only supposed to use it for potentially reading metas from it, and `GstRTPBasePay` is currently passing the same buffer as the one that owns the data so we currently end up with the possibility to e.g. resize the buffer which would invalidate the data. This change prevents at least the biggest problems, but would still allow getting an immutable and mutable reference to the same data with a bit of effort. See also https://gitlab.freedesktop.org/gstreamer/gstreamer-rs/-/issues/375 Part-of: --- gstreamer-rtp/src/rtp_header_extension.rs | 4 ++-- gstreamer-rtp/src/subclass/rtp_header_extension.rs | 8 ++++---- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/gstreamer-rtp/src/rtp_header_extension.rs b/gstreamer-rtp/src/rtp_header_extension.rs index 4621411f0..e6ce4f3a9 100644 --- a/gstreamer-rtp/src/rtp_header_extension.rs +++ b/gstreamer-rtp/src/rtp_header_extension.rs @@ -32,7 +32,7 @@ pub trait RTPHeaderExtensionExtManual: sealed::Sealed + IsA &self, input_meta: &gst::Buffer, write_flags: RTPHeaderExtensionFlags, - output: &mut gst::BufferRef, + output: &gst::BufferRef, data: &mut [u8], ) -> Result { let size = data.len(); @@ -41,7 +41,7 @@ pub trait RTPHeaderExtensionExtManual: sealed::Sealed + IsA self.as_ref().to_glib_none().0, input_meta.to_glib_none().0, write_flags.into_glib(), - output.as_mut_ptr(), + mut_override(output.as_ptr()), data.to_glib_none().0, size, ); diff --git a/gstreamer-rtp/src/subclass/rtp_header_extension.rs b/gstreamer-rtp/src/subclass/rtp_header_extension.rs index 006620451..2ebbc872e 100644 --- a/gstreamer-rtp/src/subclass/rtp_header_extension.rs +++ b/gstreamer-rtp/src/subclass/rtp_header_extension.rs @@ -19,7 +19,7 @@ pub trait RTPHeaderExtensionImpl: RTPHeaderExtensionImplExt + ElementImpl { &self, input: &gst::BufferRef, write_flags: crate::RTPHeaderExtensionFlags, - output: &mut gst::BufferRef, + output: &gst::BufferRef, output_data: &mut [u8], ) -> Result { self.parent_write(input, write_flags, output, output_data) @@ -97,7 +97,7 @@ pub trait RTPHeaderExtensionImplExt: sealed::Sealed + ObjectSubclass { &self, input: &gst::BufferRef, write_flags: crate::RTPHeaderExtensionFlags, - output: &mut gst::BufferRef, + output: &gst::BufferRef, output_data: &mut [u8], ) -> Result { unsafe { @@ -114,7 +114,7 @@ pub trait RTPHeaderExtensionImplExt: sealed::Sealed + ObjectSubclass { .0, input.as_ptr(), write_flags.into_glib(), - output.as_mut_ptr(), + mut_override(output.as_ptr()), output_data.as_mut_ptr(), output_data.len(), ); @@ -318,7 +318,7 @@ unsafe extern "C" fn write( match imp.write( gst::BufferRef::from_ptr(input), from_glib(write_flags), - gst::BufferRef::from_mut_ptr(output), + gst::BufferRef::from_ptr(output), if output_data_len == 0 { &mut [] } else {