Script 'mail_helper' called by obssrc Hello community, here is the log from the commit of package lame for openSUSE:Factory checked in at 2026-10-23 20:20:52 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/lame (Old) and /work/SRC/openSUSE:Factory/.lame.new.2252680 (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "lame" Fri Oct 23 20:20:52 2026 rev:7 rq:1385925 version:4.0 Changes: -------- --- /work/SRC/openSUSE:Factory/lame/lame.changes 2023-03-15 18:54:01.372228664 +0100 +++ /work/SRC/openSUSE:Factory/.lame.new.2252680/lame.changes 2026-10-23 20:20:58.671193694 +0200 @@ -1,0 +2,23 @@ +Sat Oct 17 17:09:20 UTC 2026 - Martin Pluskal <[email protected]> + +- Update to version 4.0 (libmp3lame soname unchanged, still .so.0): + * Major version bump: the 9-byte encoder version field in MP3s + overflowed with 3.100 minor versions; 4.0 resets the scheme. + * Security fixes: AIFF header parser integer-underflow DoS + (CVSS 5.5, frontend); Blade DLL beInitStream stack overflow + (Windows-only, CVSS 8.4). + * Fix build with recent GCC/Clang (UTF-8 ID3 tag functions); + export id3tag_set_textinfo/comment_utf8 from shared lib. + * Add ID3v2.4 support and upstream pkg-config support. + * mp3rtp gains IPv6 support (incompatible CLI change). +- Use upstream lame.pc; keep libmp3lame.pc alias. +- Use pkgconfig(ncurses); drop obsolete Group tags. +- Add pkgconfig(libmpg123) BuildRequires: 4.0's --enable-decoder + mandates external mpg123 (configure errors out without it). +- Add lame-4.0-frontend-utf8.patch (backport of upstream post-4.0 + fix): split the mistyped ID3v2 tag handler into typed UTF-16/UTF-8 + variants and add id3tag_set_fieldvalue_utf8(); export hip_set_pinfo + and hip_finish_pinfo for the frontend; unbreaks the build + with GCC 14+ defaults. + +------------------------------------------------------------------- Old: ---- lame-3.100.tar.gz New: ---- lame-4.0-frontend-utf8.patch lame-4.0.tar.gz ----------(New B)---------- New: mandates external mpg123 (configure errors out without it). - Add lame-4.0-frontend-utf8.patch (backport of upstream post-4.0 fix): split the mistyped ID3v2 tag handler into typed UTF-16/UTF-8 ----------(New E)---------- ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ lame.spec ++++++ --- /var/tmp/diff_new_pack.W219uS/_old 2026-10-23 20:21:00.192257347 +0200 +++ /var/tmp/diff_new_pack.W219uS/_new 2026-10-23 20:21:00.197257556 +0200 @@ -1,7 +1,7 @@ # # spec file for package lame # -# Copyright (c) 2023 SUSE LLC +# Copyright (c) 2026 SUSE LLC and contributors # Copyright (c) 2012 Pascal Bleser <[email protected]> # # All modifications and additions to the file contributed by third parties @@ -19,22 +19,23 @@ %define sover 0 Name: lame -Version: 3.100 +Version: 4.0 Release: 0 Summary: The LAME MP3 encoder License: LGPL-2.0-or-later -Group: Productivity/Multimedia/Sound/Editors and Convertors URL: https://lame.sourceforge.net/ Source: http://prdownloads.sourceforge.net/lame/lame-%{version}.tar.gz Source99: lame-rpmlintrc Source1000: baselibs.conf Patch1: lame-field-width-fix.patch +Patch2: lame-4.0-frontend-utf8.patch BuildRequires: autoconf BuildRequires: automake BuildRequires: libtool -BuildRequires: ncurses-devel BuildRequires: pkgconfig BuildRequires: pkgconfig(gtk+-2.0) +BuildRequires: pkgconfig(libmpg123) +BuildRequires: pkgconfig(ncurses) Requires: libmp3lame%{sover} >= %{version} %{?suse_build_hwcaps_libs} %ifarch %{ix86} @@ -50,7 +51,6 @@ %package doc Summary: Documentation for the LAME MP3 encoder -Group: Productivity/Multimedia/Sound/Editors and Convertors Requires: %{name} = %{version} %description doc @@ -60,7 +60,6 @@ %package -n libmp3lame%{sover} Summary: The LAME MP3 encoder library -Group: System/Libraries %description -n libmp3lame%{sover} LAME is an encoder that converts audio to the MP3 file format. It has @@ -69,7 +68,6 @@ %package -n libmp3lame-devel Summary: Development files for the LAME MP3 encoder -Group: Development/Libraries/C and C++ Requires: libmp3lame%{sover} = %{version} %description -n libmp3lame-devel @@ -77,7 +75,6 @@ %package mp3rtp Summary: MP3 Encoder for RTP Streaming -Group: Productivity/Multimedia/Sound/Editors and Convertors Requires: libmp3lame%{sover} >= %{version} %description mp3rtp @@ -112,19 +109,7 @@ make install pkgdocdir=%{_defaultdocdir}/%{name}/ DESTDIR=%{buildroot} rm -f %{buildroot}%{_libdir}/libmp3lame.la -#make package config file -mkdir -p %{buildroot}%{_libdir}/pkgconfig -cat << EOF > %{buildroot}%{_libdir}/pkgconfig/lame.pc -prefix=%{_prefix} -libdir=%{_libdir} -includedir=%{_includedir}/lame - -Name: lame -Description: encoder that converts audio to the MP3 file format. -Version: %{version} -Libs: -L\${libdir} -lmp3lame -Cflags: -I\${includedir} -EOF +# upstream ships lame.pc since 4.0; keep libmp3lame.pc alias for compatibility pushd %{buildroot}%{_libdir}/pkgconfig/ ln -s lame.pc libmp3lame.pc popd ++++++ lame-4.0-frontend-utf8.patch ++++++ diff -rub lame-4.0.orig/frontend/parse.c lame-4.0/frontend/parse.c --- lame-4.0.orig/frontend/parse.c 2026-10-17 19:17:38.681406662 +0200 +++ lame-4.0/frontend/parse.c 2026-10-17 19:17:38.857426437 +0200 @@ -402,40 +402,62 @@ } #ifdef ID3TAGS_EXTENDED -static int -set_id3v2tag(lame_global_flags* gfp, TextEncoding enc, int type, unsigned short const* str) +/** + * @internal + * @brief Returns the ID3v2 text frame that a tag option sets. + * @param type the letter of the option: a, t, l, g, n or y. + * @return the four-character frame identifier. NULL for the comment (c), a + * user frame (v) and any other letter. + */ +static char const * +id3v2_text_frame(int type) { - switch (enc) - { - case TENC_UTF8: switch (type) { - case 'a': return id3tag_set_textinfo_utf8(gfp, "TPE1", str); - case 't': return id3tag_set_textinfo_utf8(gfp, "TIT2", str); - case 'l': return id3tag_set_textinfo_utf8(gfp, "TALB", str); - case 'g': return id3tag_set_textinfo_utf8(gfp, "TCON", str); - case 'c': return id3tag_set_comment_ucs2(gfp, 0, 0, str); - case 'n': return id3tag_set_textinfo_utf8(gfp, "TRCK", str); - case 'y': return id3tag_set_textinfo_utf8(gfp, "TYER", str); - case 'v': return id3tag_set_fieldvalue_ucs2(gfp, str); + case 'a': return "TPE1"; + case 't': return "TIT2"; + case 'l': return "TALB"; + case 'g': return "TCON"; + case 'n': return "TRCK"; + case 'y': return "TYER"; } - ;; - case TENC_UTF16: + return NULL; +} + +/* Set an ID3v2 tag field from UTF-16 data. The data pointer is genuinely + UTF-16 here, so the UTF-16 id3tag_* setters are used throughout. */ +static int +set_id3v2tag_utf16(lame_global_flags* gfp, int type, unsigned short const* str) +{ + char const *const id = id3v2_text_frame(type); + + if (id != NULL) + return id3tag_set_textinfo_utf16(gfp, id, str); switch (type) { - case 'a': return id3tag_set_textinfo_utf16(gfp, "TPE1", str); - case 't': return id3tag_set_textinfo_utf16(gfp, "TIT2", str); - case 'l': return id3tag_set_textinfo_utf16(gfp, "TALB", str); - case 'g': return id3tag_set_textinfo_utf16(gfp, "TCON", str); case 'c': return id3tag_set_comment_utf16(gfp, 0, 0, str); - case 'n': return id3tag_set_textinfo_utf16(gfp, "TRCK", str); - case 'y': return id3tag_set_textinfo_utf16(gfp, "TYER", str); case 'v': return id3tag_set_fieldvalue_utf16(gfp, str); } - ;; - default: return -3; +} + +/* Set an ID3v2 tag field from UTF-8 data. The data pointer is a UTF-8 char + string (not UTF-16 as the old, mistyped single handler assumed), so the + UTF-8 id3tag_* setters are used - including id3tag_set_fieldvalue_utf8 for + 'v', which replaces the removed *_ucs2 calls the UTF-8 path used to make. */ +static int +set_id3v2tag_utf8(lame_global_flags* gfp, int type, char const* str) +{ + char const *const id = id3v2_text_frame(type); + + if (id != NULL) + return id3tag_set_textinfo_utf8(gfp, id, str); + switch (type) + { + case 'c': return id3tag_set_comment_utf8(gfp, 0, 0, str); + case 'v': return id3tag_set_fieldvalue_utf8(gfp, str); } + return -3; } #endif @@ -480,8 +502,8 @@ default: #ifdef ID3TAGS_EXTENDED case TENC_LATIN1: result = set_id3tag(gfp, type, x); break; - case TENC_UTF16: result = set_id3v2tag(gfp, enc, type, x); break; - case TENC_UTF8: result = set_id3v2tag(gfp, enc, type, x); break; + case TENC_UTF16: result = set_id3v2tag_utf16(gfp, type, x); break; + case TENC_UTF8: result = set_id3v2tag_utf8(gfp, type, x); break; #else case TENC_RAW: result = set_id3tag(gfp, type, x); break; #endif diff -rub lame-4.0.orig/include/lame.h lame-4.0/include/lame.h --- lame-4.0.orig/include/lame.h 2026-10-17 19:17:38.769416550 +0200 +++ lame-4.0/include/lame.h 2026-10-17 19:17:38.857426437 +0200 @@ -1297,6 +1297,9 @@ int CDECL id3tag_set_fieldvalue_utf16(lame_t gfp, const unsigned short *fieldvalue); /* experimental */ +int CDECL id3tag_set_fieldvalue_utf8(lame_t gfp, const char *fieldvalue); + +/* experimental */ int CDECL id3tag_set_textinfo_utf16(lame_t gfp, char const *id, unsigned short const *text); /* experimental */ diff -rub lame-4.0.orig/include/libmp3lame.sym lame-4.0/include/libmp3lame.sym --- lame-4.0.orig/include/libmp3lame.sym 2026-10-17 19:17:38.769416550 +0200 +++ lame-4.0/include/libmp3lame.sym 2026-10-17 19:22:59.389437149 +0200 @@ -188,6 +188,8 @@ hip_set_errorf hip_set_debugf hip_set_msgf +hip_set_pinfo +hip_finish_pinfo hip_decode hip_decode_headers hip_decode1 @@ -229,6 +231,7 @@ id3tag_set_comment_ucs2 id3tag_set_fieldvalue_ucs2 id3tag_set_fieldvalue_utf16 +id3tag_set_fieldvalue_utf8 id3tag_set_textinfo_utf16 id3tag_set_comment_utf16 id3tag_set_textinfo_utf8 diff -rub lame-4.0.orig/libmp3lame/id3tag.c lame-4.0/libmp3lame/id3tag.c --- lame-4.0.orig/libmp3lame/id3tag.c 2026-10-17 19:17:38.705409359 +0200 +++ lame-4.0/libmp3lame/id3tag.c 2026-10-17 19:17:38.861426887 +0200 @@ -1832,6 +1832,34 @@ return -1; } +/*! Set an arbitrary ID3v2 text frame, taking UTF-8. */ +/*! + \ingroup api_tags + \c id3tag_set_fieldvalue() for UTF-8 input. The frame identifier is ASCII in + both cases, so the string is read the same way. Only the text differs. + + \param gfp the encoder instance. + \param fieldvalue the frame identifier, "=", and the text, in UTF-8. NULL + or empty is accepted and does nothing. + \return 0 on success. -1 if the string is too short or has no "=" in the + fifth position. Otherwise the result of + \c id3tag_set_textinfo_utf8(). +*/ +int +id3tag_set_fieldvalue_utf8(lame_t gfp, const char *fieldvalue) +{ + if (is_lame_internal_flags_null(gfp)) { + return 0; + } + if (fieldvalue && *fieldvalue) { + if (strlen(fieldvalue) < 5 || fieldvalue[4] != '=') { + return -1; + } + return id3tag_set_textinfo_utf8(gfp, fieldvalue, &fieldvalue[5]); + } + return 0; +} + extern int id3tag_set_fieldvalue_ucs2(lame_t gfp, const unsigned short *fieldvalue); ++++++ lame-3.100.tar.gz -> lame-4.0.tar.gz ++++++ ++++ 149005 lines of diff (skipped)
