File tracker-miners-CVE-2026-1766.patch of Package tracker-miners
diff -urp tracker-miners-3.6.2.orig/src/tracker-extract/tracker-extract-mp3.c tracker-miners-3.6.2/src/tracker-extract/tracker-extract-mp3.c
--- tracker-miners-3.6.2.orig/src/tracker-extract/tracker-extract-mp3.c 2026-02-05 15:18:31.109799749 -0600
+++ tracker-miners-3.6.2/src/tracker-extract/tracker-extract-mp3.c 2026-02-05 15:18:52.366800661 -0600
@@ -1565,6 +1565,46 @@ extract_ufid_tags (id3v2tag *tag, const
}
static void
+extract_comm_tag (id3v2tag *tag,
+ const gchar *data,
+ guint pos,
+ size_t csize,
+ id3tag *info,
+ gfloat version)
+{
+ gchar *word = NULL;
+ gchar text_encode;
+ const gchar *text_desc;
+ const gchar *text;
+ guint offset;
+ gint text_desc_len;
+
+ text_encode = data[pos + 0]; /* $xx */
+ text_desc = &data[pos + 4]; /* <text string according to encoding> $00 (00) */
+ text_desc_len = id3v2_strlen (text_encode, text_desc, csize - 4);
+
+ offset = 4 + text_desc_len + id3v2_nul_size (text_encode);
+
+ if (offset >= csize)
+ return;
+
+ text = &data[pos + offset]; /* <full text string according to encoding> */
+
+ if (version == 2.3f)
+ word = id3v2_text_to_utf8 (text_encode, text, csize - offset, info);
+ else
+ word = id3v24_text_to_utf8 (text_encode, text, csize - offset, info);
+
+ if (!tracker_is_empty_string (word)) {
+ g_strstrip (word);
+ g_free (tag->comment);
+ tag->comment = word;
+ } else {
+ g_free (word);
+ }
+}
+
+static void
get_id3v24_tags (id3v24frame frame,
const gchar *data,
size_t csize,
@@ -1603,35 +1643,9 @@ get_id3v24_tags (id3v24frame f
break;
}
- case ID3V24_COMM: {
- gchar *word;
- gchar text_encode;
- const gchar *text_desc;
- const gchar *text;
- guint offset;
- gint text_desc_len;
-
- text_encode = data[pos + 0]; /* $xx */
- text_desc = &data[pos + 4]; /* <text string according to encoding> $00 (00) */
- text_desc_len = id3v2_strlen (text_encode, text_desc, csize - 4);
-
- offset = 4 + text_desc_len + id3v2_nul_size (text_encode);
- text = &data[pos + offset]; /* <full text string according to encoding> */
-
- if (offset >= csize)
- break;
-
- word = id3v24_text_to_utf8 (text_encode, text, csize - offset, info);
-
- if (!tracker_is_empty_string (word)) {
- g_strstrip (word);
- g_free (tag->comment);
- tag->comment = word;
- } else {
- g_free (word);
- }
+ case ID3V24_COMM:
+ extract_comm_tag (tag, data, pos, csize, info, 2.4f);
break;
- }
case ID3V24_TMCL: {
extract_performers_tags (tag, data, pos, csize, info, 2.4f);
@@ -1811,33 +1825,9 @@ get_id3v23_tags (id3v24frame f
break;
}
- case ID3V24_COMM: {
- gchar *word;
- gchar text_encode;
- const gchar *text_desc;
- const gchar *text;
- guint offset;
- gint text_desc_len;
-
- text_encode = data[pos + 0]; /* $xx */
- text_desc = &data[pos + 4]; /* <text string according to encoding> $00 (00) */
- text_desc_len = id3v2_strlen (text_encode, text_desc, csize - 4);
-
- offset = 4 + text_desc_len + id3v2_nul_size (text_encode);
- text = &data[pos + offset]; /* <full text string according to encoding> */
-
- word = id3v2_text_to_utf8 (text_encode, text, csize - offset, info);
-
- if (!tracker_is_empty_string (word)) {
- g_strstrip (word);
- g_free (tag->comment);
- tag->comment = word;
- } else {
- g_free (word);
- }
-
+ case ID3V24_COMM:
+ extract_comm_tag (tag, data, pos, csize, info, 2.4f);
break;
- }
case ID3V24_IPLS: {
extract_performers_tags (tag, data, pos, csize, info, 2.3f);