Your message dated Sat, 14 Mar 2026 11:48:35 +0000
with message-id <[email protected]>
and subject line Released with 13.4
has caused the Debian Bug report #1129705,
regarding trixie-pu: package mpg123/1.32.10-1+deb13u1
to be marked as done.

This means that you claim that the problem has been dealt with.
If this is not the case it is now your responsibility to reopen the
Bug report if necessary, and/or fix the problem forthwith.

(NB: If you are a system administrator and have no idea what this
message is talking about, this may indicate a serious mail system
misconfiguration somewhere. Please contact [email protected]
immediately.)


-- 
1129705: https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=1129705
Debian Bug Tracking System
Contact [email protected] with problems
--- Begin Message ---
Package: release.debian.org
Severity: normal
Tags: trixie
X-Debbugs-Cc: [email protected], [email protected]
Control: affects -1 + src:mpg123
User: [email protected]
Usertags: pu

[ Reason ]
The uploaded includes a targetted fix of #1129616 backported to stable.

[ Impact ]
The bug causes issues with mp3 playback in mpd (see #1129612).

[ Tests ]
No automated tests.

[ Risks ]
The patches are easy to revert if they cause issues. The changes are in
unstable since August 2025.

[ Checklist ]
  [x] *all* changes are documented in the d/changelog
  [x] I reviewed all changes and I approve them
  [x] attach debdiff against the package in stable
  [x] the issue is verified as fixed in unstable

[ Other info ]
The package is already uploaded.

Cheers
-- 
Sebastian Ramacher
diff --git a/debian/changelog b/debian/changelog
index 5289301..b4d9c47 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -1,3 +1,11 @@
+mpg123 (1.32.10-1+deb13u1) unstable; urgency=medium
+
+  * debian/gbp.conf: Switch to trixie branch
+  * debian/patches: Do not modify raw ID3v2 data while parsing (Closes:
+    #1129616)
+
+ -- Sebastian Ramacher <[email protected]>  Wed, 04 Mar 2026 20:59:43 +0100
+
 mpg123 (1.32.10-1) unstable; urgency=medium
 
   [ Bastien Roucariès ]
diff --git a/debian/gbp.conf b/debian/gbp.conf
index 4f24002..155e93d 100644
--- a/debian/gbp.conf
+++ b/debian/gbp.conf
@@ -1,3 +1,4 @@
 [DEFAULT]
 pristine-tar = True
 compression = bzip2
+debian-branch = trixie
diff --git 
a/debian/patches/0002-libmpg123-not-modifying-raw-ID3v2-tag-data-anymore-f.patch
 
b/debian/patches/0002-libmpg123-not-modifying-raw-ID3v2-tag-data-anymore-f.patch
new file mode 100644
index 0000000..bc16b63
--- /dev/null
+++ 
b/debian/patches/0002-libmpg123-not-modifying-raw-ID3v2-tag-data-anymore-f.patch
@@ -0,0 +1,160 @@
+From: thor <thor@35dc7657-300d-0410-a2e5-dc2837fedb53>
+Date: Thu, 31 Jul 2025 19:37:38 +0000
+Subject: libmpg123: not modifying raw ID3v2 tag data anymore for
+ store_id3_text() (bug 379)
+MIME-Version: 1.0
+Content-Type: text/plain; charset="utf-8"
+Content-Transfer-Encoding: 8bit
+
+I started with a routine expecting the encoding byte directly followed by the 
text
+data. Then we got data where the encoding is stored at some distance. I faked 
the
+former mode by modifying the input instead of doing the right thing which I 
finally
+did now: Hand in the encoding as separate function argument even if it is just 
the
+leading byte.
+
+Now parsing ID3v2 tags doesn't modify the data you get from 
MPG123_STORE_RAW_ID3.
+For all earlier releases, You need to combine MPG123_STORE_RAW_ID3 with
+MPG123_SKIP_ID3V2 to avoid messing with the data. This was the initial use 
case —
+client code wants the raw data to decode itself, not let libmpg123 do it. We 
just
+forgot that you can do both …
+
+git-svn-id: svn://scm.orgis.org/mpg123/trunk@5518 
35dc7657-300d-0410-a2e5-dc2837fedb53
+---
+ src/libmpg123/id3.c | 41 +++++++++++++++++++++++------------------
+ 1 file changed, 23 insertions(+), 18 deletions(-)
+
+diff --git a/src/libmpg123/id3.c b/src/libmpg123/id3.c
+index 0bd5cda..20eaa9c 100644
+--- a/src/libmpg123/id3.c
++++ b/src/libmpg123/id3.c
+@@ -330,9 +330,9 @@ void INT123_id3_link(mpg123_handle *fr)
+       Since we can overwrite strings with ID3 update frames, don't free
+       memory, just grow strings.
+ */
+-static void store_id3_text(mpg123_string *sb, unsigned char *source, size_t 
source_size, const int noquiet, const int notranslate)
++static void store_id3_text(mpg123_string *sb, unsigned char encoding, 
unsigned char *source
++,     size_t source_size, const int noquiet, const int notranslate)
+ {
+-      unsigned char encoding;
+       if(sb) // Always overwrite, even with nothing.
+               sb->fill = 0;
+       if(!source_size)
+@@ -356,14 +356,13 @@ static void store_id3_text(mpg123_string *sb, unsigned 
char *source, size_t sour
+               return;
+       }
+ 
+-      encoding = source[0];
+       if(encoding > mpg123_id3_enc_max)
+       {
+               if(noquiet)
+                       error1("Unknown text encoding %u, I take no chances, 
sorry!", encoding);
+               return;
+       }
+-      INT123_id3_to_utf8(sb, encoding, source+1, source_size-1, noquiet);
++      INT123_id3_to_utf8(sb, encoding, source, source_size, noquiet);
+ 
+       if(sb->fill) debug1("UTF-8 string (the first one): %s", sb->p);
+       else if(noquiet) error("unable to convert string to UTF-8 (out of 
memory, junk input?)!");
+@@ -449,6 +448,11 @@ static void process_text(mpg123_handle *fr, unsigned char 
*realdata, size_t real
+ {
+       /* Text encoding          $xx */
+       /* The text (encoded) ... */
++      if(realsize < 1)
++      {
++              if(NOQUIET) error("Not even an encoding byte?");
++              return;
++      }
+       mpg123_text *t = add_text(fr, id);
+       if(VERBOSE4) fprintf(stderr, "Note: Storing text from %s encoding\n", 
enc_name(realdata[0]));
+       if(t == NULL)
+@@ -460,7 +464,8 @@ static void process_text(mpg123_handle *fr, unsigned char 
*realdata, size_t real
+       ?       (char[5]) { t->id[0], t->id[1], t->id[2], t->id[3], 0 }
+       :       "(nil)" );
+       memcpy(t->id, id, 4);
+-      store_id3_text(&t->text, realdata, realsize, NOQUIET, fr->p.flags & 
MPG123_PLAIN_ID3TEXT);
++      store_id3_text( &t->text, realdata[0], realdata+1, realsize-1
++      ,       NOQUIET, fr->p.flags & MPG123_PLAIN_ID3TEXT );
+       if(VERBOSE4) // Do not print unsanitized text to terminals!
+               fprintf(stderr, "Note: ID3v2 %c%c%c%c text frame stored\n", 
id[0], id[1], id[2], id[3]);
+ }
+@@ -577,8 +582,6 @@ static void process_comment(mpg123_handle *fr, enum 
frame_types tt, unsigned cha
+               return;
+       }
+       memcpy(lang, realdata+1, 3);
+-      /* Now I can abuse a byte from lang for the encoding. */
+-      descr[-1] = encoding;
+       /* Be careful with finding the end of description, I have to honor 
encoding here. */
+       text = next_text(descr, encoding, realsize-(descr-realdata));
+       if(text == NULL)
+@@ -591,14 +594,14 @@ static void process_comment(mpg123_handle *fr, enum 
frame_types tt, unsigned cha
+               mpg123_string description;
+               mpg123_init_string(&description);
+               // Store the text, with desired encoding, but for comments 
always a local copy in UTF-8.
+-              store_id3_text( &description, descr-1, text-descr+1
++              store_id3_text( &description, encoding, descr, text-descr
+               ,       NOQUIET, fr->p.flags & MPG123_PLAIN_ID3TEXT );
+               if(tt == comment)
+-                      store_id3_text( &localcom.description, descr-1, 
text-descr+1
++                      store_id3_text( &localcom.description, encoding, descr, 
text-descr
+                       ,       NOQUIET, 0 );
+               if(VERBOSE4)
+                       fprintf( stderr, "Note: Storing comment from %s 
encoding\n"
+-                      ,       enc_name(realdata[0]) );
++                      ,       enc_name(encoding) );
+               xcom = tt == uslt
+               ?       add_uslt(fr, lang, &description)
+               :       add_comment(fr, lang, &description);
+@@ -616,8 +619,8 @@ static void process_comment(mpg123_handle *fr, enum 
frame_types tt, unsigned cha
+               mpg123_move_string(&description, &xcom->description);
+       }
+ 
+-      text[-1] = encoding; /* Byte abusal for encoding... */
+-      store_id3_text(&xcom->text, text-1, realsize+1-(text-realdata), 
NOQUIET, fr->p.flags & MPG123_PLAIN_ID3TEXT);
++      store_id3_text( &xcom->text, encoding, text, realsize-(text-realdata)
++      ,       NOQUIET, fr->p.flags & MPG123_PLAIN_ID3TEXT );
+       /* Remember: I will probably decode the above (again) for rva comment 
checking. So no messing around, please. */
+ 
+       if(VERBOSE4) /* Do _not_ print the verbatim text: The encoding might be 
funny! */
+@@ -641,7 +644,8 @@ static void process_comment(mpg123_handle *fr, enum 
frame_types tt, unsigned cha
+               if((rva_mode > -1) && (fr->rva.level[rva_mode] <= rva_level))
+               {
+                       /* Only translate the contents in here where we really 
need them. */
+-                      store_id3_text(&localcom.text, text-1, 
realsize+1-(text-realdata), NOQUIET, 0);
++                      store_id3_text( &localcom.text, encoding, text, 
realsize-(text-realdata)
++                      ,       NOQUIET, 0 );
+                       if(localcom.text.fill > 0)
+                       {
+                               fr->rva.gain[rva_mode] = (float) 
atof(localcom.text.p);
+@@ -689,7 +693,7 @@ static void process_extra(mpg123_handle *fr, unsigned 
char* realdata, size_t rea
+               mpg123_init_string(&description);
+               /* The outside storage gets reencoded to UTF-8 only if not 
requested otherwise.
+                  Remember that we really need the -1 here to hand in the 
encoding byte!*/
+-              store_id3_text( &description, descr-1, text-descr+1
++              store_id3_text( &description, encoding, descr, text-descr
+               ,       NOQUIET, fr->p.flags & MPG123_PLAIN_ID3TEXT );
+               xex = add_extra(fr, &description);
+               if(xex)
+@@ -706,10 +710,10 @@ static void process_extra(mpg123_handle *fr, unsigned 
char* realdata, size_t rea
+       init_mpg123_text(&localex); /* For our local copy. */
+ 
+       /* Our local copy is always stored in UTF-8! */
+-      store_id3_text(&localex.description, descr-1, text-descr+1, NOQUIET, 0);
++      store_id3_text(&localex.description, encoding, descr, text-descr, 
NOQUIET, 0);
+       /* At first, only store the outside copy of the payload. We may not 
need the local copy. */
+-      text[-1] = encoding;
+-      store_id3_text(&xex->text, text-1, realsize-(text-realdata)+1, NOQUIET, 
fr->p.flags & MPG123_PLAIN_ID3TEXT);
++      store_id3_text( &xex->text, encoding, text, realsize-(text-realdata)
++      ,       NOQUIET, fr->p.flags & MPG123_PLAIN_ID3TEXT );
+ 
+       /* Now check if we would like to interpret this extra info for RVA. */
+       if(localex.description.fill > 0)
+@@ -737,7 +741,8 @@ static void process_extra(mpg123_handle *fr, unsigned 
char* realdata, size_t rea
+               if((rva_mode > -1) && (fr->rva.level[rva_mode] <= rva_level))
+               {
+                       /* Now we need the translated copy of the data. */
+-                      store_id3_text(&localex.text, text-1, 
realsize-(text-realdata)+1, NOQUIET, 0);
++                      store_id3_text( &localex.text, encoding, text, 
realsize-(text-realdata)
++                      ,       NOQUIET, 0 );
+                       if(localex.text.fill > 0)
+                       {
+                               if(is_peak)
diff --git 
a/debian/patches/0003-libmpg123-fix-store_id3_text-to-prepend-encoding-for.patch
 
b/debian/patches/0003-libmpg123-fix-store_id3_text-to-prepend-encoding-for.patch
new file mode 100644
index 0000000..7c76663
--- /dev/null
+++ 
b/debian/patches/0003-libmpg123-fix-store_id3_text-to-prepend-encoding-for.patch
@@ -0,0 +1,39 @@
+From: thor <thor@35dc7657-300d-0410-a2e5-dc2837fedb53>
+Date: Thu, 31 Jul 2025 19:56:03 +0000
+Subject: libmpg123: fix store_id3_text() to prepend encoding for
+ MPG123_PLAIN_ID3TEXT
+MIME-Version: 1.0
+Content-Type: text/plain; charset="utf-8"
+Content-Transfer-Encoding: 8bit
+
+… fixing the regression introduced by the fix for bug 279.
+
+git-svn-id: svn://scm.orgis.org/mpg123/trunk@5520 
35dc7657-300d-0410-a2e5-dc2837fedb53
+---
+ src/libmpg123/id3.c | 9 +++++----
+ 1 file changed, 5 insertions(+), 4 deletions(-)
+
+diff --git a/src/libmpg123/id3.c b/src/libmpg123/id3.c
+index 20eaa9c..cb73bd5 100644
+--- a/src/libmpg123/id3.c
++++ b/src/libmpg123/id3.c
+@@ -345,14 +345,15 @@ static void store_id3_text(mpg123_string *sb, unsigned 
char encoding, unsigned c
+       if(notranslate)
+       {
+               /* Future: Add a path for ID3 errors. */
+-              if(!mpg123_grow_string(sb, source_size))
++              if(!mpg123_grow_string(sb, source_size+1))
+               {
+                       if(noquiet) error("Cannot resize target string, out of 
memory?");
+                       return;
+               }
+-              memcpy(sb->p, source, source_size);
+-              sb->fill = source_size;
+-              debug1("stored undecoded ID3 text of size %zu", source_size);
++              sb->p[0] = (char)encoding;
++              memcpy(sb->p+1, source, source_size);
++              sb->fill = source_size+1;
++              debug1("stored undecoded ID3 text of size %zu", source_size+1);
+               return;
+       }
+ 
diff --git a/debian/patches/series b/debian/patches/series
index a7fb829..3e782c4 100644
--- a/debian/patches/series
+++ b/debian/patches/series
@@ -1 +1,3 @@
 0001-Disable-function-mpg123_noise.patch
+0002-libmpg123-not-modifying-raw-ID3v2-tag-data-anymore-f.patch
+0003-libmpg123-fix-store_id3_text-to-prepend-encoding-for.patch

--- End Message ---
--- Begin Message ---
Package: release.debian.org
Version: 13.4

This update has been released as part of Debian 13.4.

--- End Message ---

Reply via email to