File 0005-audiofx-Fix-Nightly-dangerous_implicit_autorefs_-part-2.patch of Package gstreamer-plugins-rs.41072
From 7d3668a08afc712d9dbcee2268beff67c1269610 Mon Sep 17 00:00:00 2001
From: "L. E. Segovia" <amy@centricular.com>
Date: Mon, 16 Jun 2025 13:21:45 -0300
Subject: [PATCH] audiofx: Fix Nightly dangerous_implicit_autorefs, part 2
Skip using raw pointers altogether.
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-rs/-/merge_requests/2291>
---
audio/audiofx/src/audioloudnorm/imp.rs | 20 ++++++++++++++++----
1 file changed, 16 insertions(+), 4 deletions(-)
diff --git a/audio/audiofx/src/audioloudnorm/imp.rs b/audio/audiofx/src/audioloudnorm/imp.rs
index 428b1c8004..6679291893 100644
--- a/audio/audiofx/src/audioloudnorm/imp.rs
+++ b/audio/audiofx/src/audioloudnorm/imp.rs
@@ -474,10 +474,22 @@ impl State {
// Safety: Index ranges are checked below and both slices from buf are
// guaranteed to be non-overlapping (210ms limiter_buf difference).
let (buf_read, buf_write, limiter_buf) = unsafe {
- let buf = &mut &mut *self.buf as *mut &mut [f64];
- let buf_read = (&(*buf)).get_unchecked(self.buf_index..(self.buf_index + channels));
- let buf_write = (&mut (*buf))
- .get_unchecked_mut(self.prev_buf_index..(self.prev_buf_index + channels));
+ let (buf_read, buf_write) = {
+ let (a1, a2) = self.buf.split_at_mut_unchecked(self.buf_index);
+ let (buf_read, after_buf_read) = a2.split_at_mut_unchecked(channels);
+
+ let buf_write = if self.prev_buf_index < self.buf_index {
+ // Non-overlapping guarantee
+ &mut a1[self.prev_buf_index..self.prev_buf_index + channels]
+ } else {
+ // Split happens at buf_index + channels
+ let idx = self.prev_buf_index - (self.buf_index + channels);
+ &mut after_buf_read[idx..idx + channels]
+ };
+
+ // Seal the read buffer
+ (&*buf_read, buf_write)
+ };
let limiter_buf = self
.limiter_buf
.get_unchecked_mut(self.limiter_buf_index..(self.limiter_buf_index + channels));
--
GitLab