File 0006-extractor-Fix-accounting-of-offsets-within-MP3-perfo.patch of Package localsearch
From 2897ca48b7ae79db7dcfe7e66cdd5d75cb641466 Mon Sep 17 00:00:00 2001
From: Carlos Garnacho <carlosg@gnome.org>
Date: Thu, 15 Jan 2026 13:07:43 +0100
Subject: [PATCH 6/6] extractor: Fix accounting of offsets within MP3 performer
tags
We were moving two needles when parsing multiple performers, on one
hand the base position within the MP3 frame, and on the other the
offset accounted for locally within performers, this made us inadvertently
pass maximum allowed lengths that actually were past the data frame.
To avoid this confusion, keep the base position fixed as it happens
during parsing of other tags, and only move the local offset variable.
This fixes the invalid maximum lenghts being passed.
Closes: https://gitlab.gnome.org/GNOME/localsearch/-/issues/429
---
src/extractor/tracker-extract-mp3.c | 12 ++++++------
1 file changed, 6 insertions(+), 6 deletions(-)
diff --git a/src/extractor/tracker-extract-mp3.c b/src/extractor/tracker-extract-mp3.c
index 25d208b15..867e0b15f 100644
--- a/src/extractor/tracker-extract-mp3.c
+++ b/src/extractor/tracker-extract-mp3.c
@@ -1420,12 +1420,12 @@ static void
extract_performers_tags (id3v2tag *tag, const gchar *data, guint pos, size_t csize, id3tag *info, gfloat version)
{
gchar text_encode;
- guint offset = 0;
+ size_t offset = 0;
GSList *performers;
gint n_performers = 0;
text_encode = data[pos];
- pos += 1;
+ offset += 1;
performers = NULL;
while (pos + offset < csize) {
@@ -1435,9 +1435,9 @@ extract_performers_tags (id3v2tag *tag, const gchar *data, guint pos, size_t csi
gint text_performer_len;
gchar *performer = NULL;
- text_instrument = &data[pos];
- text_instrument_len = id3v2_strlen (text_encode, text_instrument, csize - 1);
- offset = text_instrument_len + id3v2_nul_size (text_encode);
+ text_instrument = &data[pos + offset];
+ text_instrument_len = id3v2_strlen (text_encode, text_instrument, csize - offset);
+ offset += text_instrument_len + id3v2_nul_size (text_encode);
if (pos + offset >= csize)
break;
@@ -1454,7 +1454,7 @@ extract_performers_tags (id3v2tag *tag, const gchar *data, guint pos, size_t csi
n_performers += 1;
text_performer_len = id3v2_strlen (text_encode, text_performer, csize - offset);
- pos += text_instrument_len + text_performer_len + 2*id3v2_nul_size (text_encode);
+ offset += text_performer_len + id3v2_nul_size (text_encode);
}
if (performers) {
--
2.52.0