From 9f151466b7ef78a26562faf24335c34e729fbbe5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sebastian=20Dr=C3=B6ge?= Date: Tue, 21 May 2024 08:11:41 +0300 Subject: [PATCH] gstreamer: bufferlist: Check for out of range indices before trying to get buffer Passing an index bigger than the length will cause an assertion in the C function. Part-of: --- gstreamer/src/bufferlist.rs | 23 ++++++++++++----------- 1 file changed, 12 insertions(+), 11 deletions(-) diff --git a/gstreamer/src/bufferlist.rs b/gstreamer/src/bufferlist.rs index 1d5a2a540..d837111fe 100644 --- a/gstreamer/src/bufferlist.rs +++ b/gstreamer/src/bufferlist.rs @@ -50,20 +50,22 @@ impl BufferListRef { #[doc(alias = "gst_buffer_list_get")] pub fn get(&self, idx: u32) -> Option<&BufferRef> { unsafe { - let ptr = ffi::gst_buffer_list_get(self.as_mut_ptr(), idx); - if ptr.is_null() { - None - } else { - Some(BufferRef::from_ptr(ptr)) + if idx as usize >= self.len() { + return None; } + let ptr = ffi::gst_buffer_list_get(self.as_mut_ptr(), idx); + Some(BufferRef::from_ptr(ptr)) } } #[doc(alias = "gst_buffer_list_get")] pub fn get_owned(&self, idx: u32) -> Option { unsafe { + if idx as usize >= self.len() { + return None; + } let ptr = ffi::gst_buffer_list_get(self.as_mut_ptr(), idx); - from_glib_none(ptr) + Some(from_glib_none(ptr)) } } @@ -71,12 +73,11 @@ impl BufferListRef { #[doc(alias = "get_writable")] pub fn get_mut(&mut self, idx: u32) -> Option<&mut BufferRef> { unsafe { - let ptr = ffi::gst_buffer_list_get_writable(self.as_mut_ptr(), idx); - if ptr.is_null() { - None - } else { - Some(BufferRef::from_mut_ptr(ptr)) + if idx as usize >= self.len() { + return None; } + let ptr = ffi::gst_buffer_list_get_writable(self.as_mut_ptr(), idx); + Some(BufferRef::from_mut_ptr(ptr)) } }