On 2026-03-04 21:48:27 +0100, Sebastian Ramacher wrote: > 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
Now with the correct debdiff attached. Cheers -- Sebastian Ramacher
diff --git a/debian/changelog b/debian/changelog index 5289301..d2ef250 100644 --- a/debian/changelog +++ b/debian/changelog @@ -1,3 +1,11 @@ +mpg123 (1.32.10-1+deb13u1) trixie; 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 21:10:27 +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

