Script 'mail_helper' called by obssrc Hello community, here is the log from the commit of package libopenmpt for openSUSE:Factory checked in at 2026-03-26 21:07:29 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/libopenmpt (Old) and /work/SRC/openSUSE:Factory/.libopenmpt.new.8177 (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "libopenmpt" Thu Mar 26 21:07:29 2026 rev:58 rq:1342623 version:0.8.6 Changes: -------- --- /work/SRC/openSUSE:Factory/libopenmpt/libopenmpt.changes 2025-12-20 21:45:02.967616492 +0100 +++ /work/SRC/openSUSE:Factory/.libopenmpt.new.8177/libopenmpt.changes 2026-03-27 06:43:25.794926619 +0100 @@ -1,0 +2,19 @@ +Wed Mar 25 07:23:15 UTC 2026 - Martin Hauke <[email protected]> + +- Update to version 0.8.6: + * [Sec] The security fix in libopenmpt 0.8.5 (r25042) was + incomplete, causing a regression when playing short looped + ("chip2) samples (r25084). + +------------------------------------------------------------------- +Mon Mar 23 19:19:21 UTC 2026 - Martin Hauke <[email protected]> + +- Update to 0.8.5: + * [Sec] Possible out-of-bounds sample data read in a specific + combination of reverse sample playback + offset past sample + loop. (r25042). + * MOD: ProTracker arpeggio wrapraound results in an effective + period of 65536 on Paula, not pausing the sample entirely. + * ULT: Loop points were incorrectly limited for 16-bit samples. + +------------------------------------------------------------------- Old: ---- libopenmpt-0.8.4+release.autotools.tar.gz New: ---- libopenmpt-0.8.6+release.autotools.tar.gz ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ libopenmpt.spec ++++++ --- /var/tmp/diff_new_pack.kkFOvo/_old 2026-03-27 06:43:26.354949757 +0100 +++ /var/tmp/diff_new_pack.kkFOvo/_new 2026-03-27 06:43:26.366950253 +0100 @@ -1,7 +1,7 @@ # # spec file for package libopenmpt # -# Copyright (c) 2025 SUSE LLC and contributors +# Copyright (c) 2026 SUSE LLC and contributors # # All modifications and additions to the file contributed by third parties # remain the property of their copyright owners, unless otherwise agreed @@ -21,7 +21,7 @@ %define libopenmpt_modplug_version 0.8.9.0 Name: libopenmpt -Version: 0.8.4 +Version: 0.8.6 Release: 0 Summary: C++ and C library to decode tracker music files License: BSD-3-Clause @@ -120,8 +120,7 @@ %check %make_build check -%post -n %{libopenmpt} -p /sbin/ldconfig -%postun -n %{libopenmpt} -p /sbin/ldconfig +%ldconfig_scriptlets -n %{libopenmpt} %files -n openmpt123 %license LICENSE ++++++ libopenmpt-0.8.4+release.autotools.tar.gz -> libopenmpt-0.8.6+release.autotools.tar.gz ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libopenmpt-0.8.4+release.autotools/LICENSE new/libopenmpt-0.8.6+release.autotools/LICENSE --- old/libopenmpt-0.8.4+release.autotools/LICENSE 2024-12-31 11:10:08.000000000 +0100 +++ new/libopenmpt-0.8.6+release.autotools/LICENSE 2026-01-01 09:07:51.000000000 +0100 @@ -1,4 +1,4 @@ -Copyright (c) 2004-2025, OpenMPT Project Developers and Contributors +Copyright (c) 2004-2026, OpenMPT Project Developers and Contributors Copyright (c) 1997-2003, Olivier Lapicque All rights reserved. diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libopenmpt-0.8.4+release.autotools/common/version.cpp new/libopenmpt-0.8.6+release.autotools/common/version.cpp --- old/libopenmpt-0.8.4+release.autotools/common/version.cpp 2025-10-14 18:41:38.000000000 +0200 +++ new/libopenmpt-0.8.6+release.autotools/common/version.cpp 2026-01-25 23:09:58.000000000 +0100 @@ -600,12 +600,12 @@ "libopenmpt (based on OpenMPT / Open ModPlug Tracker)\n" #endif "\n" - "Copyright \xC2\xA9 2004-2025 OpenMPT Project Developers and Contributors\n" + "Copyright \xC2\xA9 2004-2026 OpenMPT Project Developers and Contributors\n" "Copyright \xC2\xA9 1997-2003 Olivier Lapicque\n" "\n" "Developers:\n" - "Johannes Schultz (2008-2025)\n" - "J\xC3\xB6rn Heusipp (2012-2025)\n" + "Johannes Schultz (2008-2026)\n" + "J\xC3\xB6rn Heusipp (2012-2026)\n" "Ahti Lepp\xC3\xA4nen (2005-2011)\n" "Robin Fernandes (2004-2007)\n" "Sergiy Pylypenko (2007)\n" @@ -745,7 +745,7 @@ #endif #if defined(MPT_WITH_OPUSENC) "Xiph.Org Foundation, Jean-Marc Valin and contributors for libopusenc\n" - "https://git.xiph.org/?p=libopusenc.git;a=summary\n" + "https://opus-codec.org/\n" "\n" #endif #if defined(MPT_WITH_LAME) @@ -803,7 +803,7 @@ mpt::ustring GetLicenseString() { return MPT_UTF8( - "Copyright (c) 2004-2025, OpenMPT Project Developers and Contributors" "\n" + "Copyright (c) 2004-2026, OpenMPT Project Developers and Contributors" "\n" "Copyright (c) 1997-2003, Olivier Lapicque" "\n" "All rights reserved." "\n" "" "\n" diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libopenmpt-0.8.4+release.autotools/common/versionNumber.h new/libopenmpt-0.8.6+release.autotools/common/versionNumber.h --- old/libopenmpt-0.8.4+release.autotools/common/versionNumber.h 2025-12-14 13:25:24.000000000 +0100 +++ new/libopenmpt-0.8.6+release.autotools/common/versionNumber.h 2026-03-24 18:23:44.000000000 +0100 @@ -15,5 +15,5 @@ // Version definitions. The only thing that needs to be changed when changing version number. #define VER_MAJORMAJOR 1 #define VER_MAJOR 32 -#define VER_MINOR 06 +#define VER_MINOR 08 #define VER_MINORMINOR 00 diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libopenmpt-0.8.4+release.autotools/configure new/libopenmpt-0.8.6+release.autotools/configure --- old/libopenmpt-0.8.4+release.autotools/configure 2025-12-14 14:45:37.000000000 +0100 +++ new/libopenmpt-0.8.6+release.autotools/configure 2026-03-24 19:07:02.000000000 +0100 @@ -1,6 +1,6 @@ #! /bin/sh # Guess values for system-dependent variables and create Makefiles. -# Generated by GNU Autoconf 2.71 for libopenmpt 0.8.4+release.autotools. +# Generated by GNU Autoconf 2.71 for libopenmpt 0.8.6+release.autotools. # # Report bugs to <https://bugs.openmpt.org/>. # @@ -621,8 +621,8 @@ # Identity of this package. PACKAGE_NAME='libopenmpt' PACKAGE_TARNAME='libopenmpt' -PACKAGE_VERSION='0.8.4+release.autotools' -PACKAGE_STRING='libopenmpt 0.8.4+release.autotools' +PACKAGE_VERSION='0.8.6+release.autotools' +PACKAGE_STRING='libopenmpt 0.8.6+release.autotools' PACKAGE_BUGREPORT='https://bugs.openmpt.org/' PACKAGE_URL='https://lib.openmpt.org/' @@ -1514,7 +1514,7 @@ # Omit some internal or obsolete options to make the list less imposing. # This message is too long to be a string in the A/UX 3.1 sh. cat <<_ACEOF -\`configure' configures libopenmpt 0.8.4+release.autotools to adapt to many kinds of systems. +\`configure' configures libopenmpt 0.8.6+release.autotools to adapt to many kinds of systems. Usage: $0 [OPTION]... [VAR=VALUE]... @@ -1585,7 +1585,7 @@ if test -n "$ac_init_help"; then case $ac_init_help in - short | recursive ) echo "Configuration of libopenmpt 0.8.4+release.autotools:";; + short | recursive ) echo "Configuration of libopenmpt 0.8.6+release.autotools:";; esac cat <<\_ACEOF @@ -1772,7 +1772,7 @@ test -n "$ac_init_help" && exit $ac_status if $ac_init_version; then cat <<\_ACEOF -libopenmpt configure 0.8.4+release.autotools +libopenmpt configure 0.8.6+release.autotools generated by GNU Autoconf 2.71 Copyright (C) 2021 Free Software Foundation, Inc. @@ -2152,7 +2152,7 @@ This file contains any messages produced by compilers while running configure, to aid debugging if configure makes a mistake. -It was created by libopenmpt $as_me 0.8.4+release.autotools, which was +It was created by libopenmpt $as_me 0.8.6+release.autotools, which was generated by GNU Autoconf 2.71. Invocation command line was $ $0$ac_configure_args_raw @@ -3648,7 +3648,7 @@ # Define the identity of the package. PACKAGE='libopenmpt' - VERSION='0.8.4+release.autotools' + VERSION='0.8.6+release.autotools' printf "%s\n" "#define PACKAGE \"$PACKAGE\"" >>confdefs.h @@ -23188,13 +23188,13 @@ -printf "%s\n" "#define MPT_SVNURL \"https://source.openmpt.org/svn/openmpt/tags/libopenmpt-0.8.4\"" >>confdefs.h +printf "%s\n" "#define MPT_SVNURL \"https://source.openmpt.org/svn/openmpt/tags/libopenmpt-0.8.6\"" >>confdefs.h -printf "%s\n" "#define MPT_SVNVERSION \"24629\"" >>confdefs.h +printf "%s\n" "#define MPT_SVNVERSION \"25100\"" >>confdefs.h -printf "%s\n" "#define MPT_SVNDATE \"2025-12-14T12:38:40.115071Z\"" >>confdefs.h +printf "%s\n" "#define MPT_SVNDATE \"2026-03-24T17:27:05.605244Z\"" >>confdefs.h printf "%s\n" "#define MPT_PACKAGE true" >>confdefs.h @@ -27166,7 +27166,7 @@ # report actual input values of CONFIG_FILES etc. instead of their # values after options handling. ac_log=" -This file was extended by libopenmpt $as_me 0.8.4+release.autotools, which was +This file was extended by libopenmpt $as_me 0.8.6+release.autotools, which was generated by GNU Autoconf 2.71. Invocation command line was CONFIG_FILES = $CONFIG_FILES @@ -27226,7 +27226,7 @@ cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_cs_config='$ac_cs_config_escaped' ac_cs_version="\\ -libopenmpt config.status 0.8.4+release.autotools +libopenmpt config.status 0.8.6+release.autotools configured by $0, generated by GNU Autoconf 2.71, with options \\"\$ac_cs_config\\" diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libopenmpt-0.8.4+release.autotools/configure.ac new/libopenmpt-0.8.6+release.autotools/configure.ac --- old/libopenmpt-0.8.4+release.autotools/configure.ac 2025-12-14 14:45:03.000000000 +0100 +++ new/libopenmpt-0.8.6+release.autotools/configure.ac 2026-03-24 19:06:30.000000000 +0100 @@ -1,4 +1,4 @@ -AC_INIT([libopenmpt], [0.8.4+release.autotools], [https://bugs.openmpt.org/], [libopenmpt], [https://lib.openmpt.org/]) +AC_INIT([libopenmpt], [0.8.6+release.autotools], [https://bugs.openmpt.org/], [libopenmpt], [https://lib.openmpt.org/]) AC_PREREQ([2.69]) # we do want 2.70, but distributions are not ready yet #AC_PREREQ([2.70]) @@ -88,9 +88,9 @@ AC_SUBST([LIBOPENMPT_LTVER_REVISION]) AC_SUBST([LIBOPENMPT_LTVER_AGE]) -AC_DEFINE([MPT_SVNURL], ["https://source.openmpt.org/svn/openmpt/tags/libopenmpt-0.8.4"], [svn version]) -AC_DEFINE([MPT_SVNVERSION], ["24629"], [svn version]) -AC_DEFINE([MPT_SVNDATE], ["2025-12-14T12:38:40.115071Z"], [svn date]) +AC_DEFINE([MPT_SVNURL], ["https://source.openmpt.org/svn/openmpt/tags/libopenmpt-0.8.6"], [svn version]) +AC_DEFINE([MPT_SVNVERSION], ["25100"], [svn version]) +AC_DEFINE([MPT_SVNDATE], ["2026-03-24T17:27:05.605244Z"], [svn date]) AC_DEFINE([MPT_PACKAGE], [true], [is package]) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libopenmpt-0.8.4+release.autotools/doc/libopenmpt/changelog.md new/libopenmpt-0.8.6+release.autotools/doc/libopenmpt/changelog.md --- old/libopenmpt-0.8.4+release.autotools/doc/libopenmpt/changelog.md 2025-12-14 13:38:21.000000000 +0100 +++ new/libopenmpt-0.8.6+release.autotools/doc/libopenmpt/changelog.md 2026-03-24 18:27:00.000000000 +0100 @@ -5,6 +5,23 @@ For fully detailed change log, please see the source repository directly. This is just a high-level summary. +### libopenmpt 0.8.6 (2026-03-24) + + * [**Sec**] The security fix in libopenmpt 0.8.5 (r25042) was incomplete, + causing a regression when playing short looped ("chip") samples (r25084). + +### libopenmpt 0.8.5 (2026-03-22) + + * [**Sec**] Possible out-of-bounds sample data read in a specific combination + of reverse sample playback + offset past sample loop. (r25042). + + * MOD: ProTracker arpeggio wrapraound results in an effective period of 65536 + on Paula, not pausing the sample entirely. + * ULT: Loop points were incorrectly limited for 16-bit samples. + + * zlib: Update to v1.3.2 (2026-02-17). + * miniz: Update to v3.1.1 (2026-02-03). + ### libopenmpt 0.8.4 (2025-12-14) * [**Bug**] openmpt123: libsndfile float32 output was broken since 0.8.1. diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libopenmpt-0.8.4+release.autotools/libopenmpt/libopenmpt.pc.in new/libopenmpt-0.8.6+release.autotools/libopenmpt/libopenmpt.pc.in --- old/libopenmpt-0.8.4+release.autotools/libopenmpt/libopenmpt.pc.in 2016-07-09 20:17:00.000000000 +0200 +++ new/libopenmpt-0.8.6+release.autotools/libopenmpt/libopenmpt.pc.in 2026-02-07 21:16:27.000000000 +0100 @@ -6,6 +6,7 @@ Name: libopenmpt Description: Tracker module player based on OpenMPT +URL: https://lib.openmpt.org/ Version: @VERSION@ Requires.private: @LIBOPENMPT_REQUIRES_PRIVATE@ Libs: -L${libdir} -lopenmpt diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libopenmpt-0.8.4+release.autotools/libopenmpt/libopenmpt_c.cpp new/libopenmpt-0.8.6+release.autotools/libopenmpt/libopenmpt_c.cpp --- old/libopenmpt-0.8.4+release.autotools/libopenmpt/libopenmpt_c.cpp 2025-02-15 17:29:14.000000000 +0100 +++ new/libopenmpt-0.8.6+release.autotools/libopenmpt/libopenmpt_c.cpp 2026-01-31 18:04:18.000000000 +0100 @@ -37,11 +37,19 @@ namespace openmpt { static const char * strdup( const char * src ) { - char * dst = (char*)std::calloc( std::strlen( src ) + 1, sizeof( char ) ); + std::size_t len = std::strlen( src ); + char * dst = (char*)std::calloc( len + 1, sizeof( char ) ); if ( !dst ) { return NULL; } - std::strcpy( dst, src ); + // GCC hates passing std::strlen() to std::strncpy(). + // OpenBSD hates strcpy(), and demands BSD-proprietary strlcpy() instead. + // Just open code the raw loop so that stupid idiotic moronic compilers just SHUT THE FUCK UP. + // That must surely be the best solution possible which everyone will like, right? Right? + for ( std::size_t i = 0; i < len; ++i ) { + dst[ i ] = src[ i ]; + } + dst[ len ] = '\0'; return dst; } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libopenmpt-0.8.4+release.autotools/libopenmpt/libopenmpt_impl.cpp new/libopenmpt-0.8.6+release.autotools/libopenmpt/libopenmpt_impl.cpp --- old/libopenmpt-0.8.4+release.autotools/libopenmpt/libopenmpt_impl.cpp 2025-12-06 20:16:48.000000000 +0100 +++ new/libopenmpt-0.8.6+release.autotools/libopenmpt/libopenmpt_impl.cpp 2025-12-17 12:52:33.000000000 +0100 @@ -129,7 +129,7 @@ str += mpt::format_value_default<std::string>(OPENMPT_API_VERSION_MINOR); str += "."; str += mpt::format_value_default<std::string>(OPENMPT_API_VERSION_PATCH); - if ( std::string(OPENMPT_API_VERSION_PREREL).length() > 0 ) { + MPT_MAYBE_CONSTANT_IF ( std::string(OPENMPT_API_VERSION_PREREL).length() > 0 ) { str += OPENMPT_API_VERSION_PREREL; } std::vector<std::string> fields; @@ -224,7 +224,7 @@ #endif // MPT_COMPILER_CLANG return ( std::string(OPENMPT_API_VERSION_PREREL).length() == 0 ) ? "1" : "0"; #if MPT_COMPILER_CLANG -#pragma clang diagnostic push +#pragma clang diagnostic pop #endif // MPT_COMPILER_CLANG } else if ( key == "library_features" ) { return get_library_features_string(); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libopenmpt-0.8.4+release.autotools/libopenmpt/libopenmpt_version.h new/libopenmpt-0.8.6+release.autotools/libopenmpt/libopenmpt_version.h --- old/libopenmpt-0.8.4+release.autotools/libopenmpt/libopenmpt_version.h 2025-12-14 13:38:21.000000000 +0100 +++ new/libopenmpt-0.8.6+release.autotools/libopenmpt/libopenmpt_version.h 2026-03-24 18:27:00.000000000 +0100 @@ -21,7 +21,7 @@ /*! \brief libopenmpt minor version number */ #define OPENMPT_API_VERSION_MINOR 8 /*! \brief libopenmpt patch version number */ -#define OPENMPT_API_VERSION_PATCH 4 +#define OPENMPT_API_VERSION_PATCH 6 /*! \brief libopenmpt pre-release tag */ #define OPENMPT_API_VERSION_PREREL "" /*! \brief libopenmpt pre-release flag */ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libopenmpt-0.8.4+release.autotools/libopenmpt/libopenmpt_version.mk new/libopenmpt-0.8.6+release.autotools/libopenmpt/libopenmpt_version.mk --- old/libopenmpt-0.8.4+release.autotools/libopenmpt/libopenmpt_version.mk 2025-12-14 13:38:21.000000000 +0100 +++ new/libopenmpt-0.8.6+release.autotools/libopenmpt/libopenmpt_version.mk 2026-03-24 18:27:00.000000000 +0100 @@ -1,8 +1,8 @@ LIBOPENMPT_VERSION_MAJOR=0 LIBOPENMPT_VERSION_MINOR=8 -LIBOPENMPT_VERSION_PATCH=4 +LIBOPENMPT_VERSION_PATCH=6 LIBOPENMPT_VERSION_PREREL= LIBOPENMPT_LTVER_CURRENT=5 -LIBOPENMPT_LTVER_REVISION=4 +LIBOPENMPT_LTVER_REVISION=6 LIBOPENMPT_LTVER_AGE=5 diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libopenmpt-0.8.4+release.autotools/man/openmpt123.1 new/libopenmpt-0.8.6+release.autotools/man/openmpt123.1 --- old/libopenmpt-0.8.4+release.autotools/man/openmpt123.1 2025-12-14 14:45:01.000000000 +0100 +++ new/libopenmpt-0.8.6+release.autotools/man/openmpt123.1 2026-03-24 19:06:28.000000000 +0100 @@ -1,13 +1,13 @@ .\" DO NOT MODIFY THIS FILE! It was generated by help2man 1.49.3. -.TH OPENMPT123 "1" "December 2025" "openmpt123 v0.8.4" "User Commands" +.TH OPENMPT123 "1" "March 2026" "openmpt123 v0.8.6" "User Commands" .SH NAME openmpt123 - command line module music player based on libopenmpt .SH SYNOPSIS .B openmpt123 [\fI\,options\/\fR] [\fI\,--\/\fR] \fI\,file1 \/\fR[\fI\,file2\/\fR] ... .SH DESCRIPTION -openmpt123 v0.8.4, libopenmpt 0.8.4+r24629 (OpenMPT 1.32.06.00 https://source.openmpt.org/svn/openmpt/tags/libopenmpt\-0.8.4@24629 (2025\-12\-14T12:38:40.115071Z) clean) -Copyright \(co 2013\-2025 OpenMPT Project Developers and Contributors <https://lib.openmpt.org/> +openmpt123 v0.8.6, libopenmpt 0.8.6+r25100 (OpenMPT 1.32.08.00 https://source.openmpt.org/svn/openmpt/tags/libopenmpt\-0.8.6@25100 (2026\-03\-24T17:27:05.605244Z) clean) +Copyright \(co 2013\-2026 OpenMPT Project Developers and Contributors <https://lib.openmpt.org/> .PP openmpt123 plays module music files. .SH OPTIONS @@ -222,4 +222,4 @@ [9]|[0] +/\- volume ramping .SH COPYRIGHT -Copyright \(co 2013\-2025 OpenMPT Project Developers and Contributors <https://lib.openmpt.org/> +Copyright \(co 2013\-2026 OpenMPT Project Developers and Contributors <https://lib.openmpt.org/> diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libopenmpt-0.8.4+release.autotools/openmpt123/openmpt123.cpp new/libopenmpt-0.8.6+release.autotools/openmpt123/openmpt123.cpp --- old/libopenmpt-0.8.4+release.autotools/openmpt123/openmpt123.cpp 2025-08-11 13:53:15.000000000 +0200 +++ new/libopenmpt-0.8.6+release.autotools/openmpt123/openmpt123.cpp 2026-01-01 09:07:51.000000000 +0100 @@ -8,7 +8,7 @@ */ static const char * const license = -"Copyright (c) 2004-2025, OpenMPT Project Developers and Contributors" "\n" +"Copyright (c) 2004-2026, OpenMPT Project Developers and Contributors" "\n" "Copyright (c) 1997-2003, Olivier Lapicque" "\n" "All rights reserved." "\n" "" "\n" @@ -491,7 +491,7 @@ return; } log << MPT_USTRING("openmpt123") << MPT_USTRING(" v") << mpt::transcode<mpt::ustring>( mpt::source_encoding, OPENMPT123_VERSION_STRING ) << MPT_USTRING(", libopenmpt ") << mpt::transcode<mpt::ustring>( libopenmpt_encoding, openmpt::string::get( "library_version" ) ) << MPT_USTRING(" (") << MPT_USTRING("OpenMPT ") << mpt::transcode<mpt::ustring>( libopenmpt_encoding, openmpt::string::get( "core_version" ) ) << MPT_USTRING(")") << lf; - log << MPT_USTRING("Copyright (c) 2013-2025 OpenMPT Project Developers and Contributors <https://lib.openmpt.org/>") << lf; + log << MPT_USTRING("Copyright (c) 2013-2026 OpenMPT Project Developers and Contributors <https://lib.openmpt.org/>") << lf; if ( banner == verbosity_normal ) { log << lf; return; @@ -538,7 +538,7 @@ static void show_man_version( textout & log ) { log << MPT_USTRING("openmpt123") << MPT_USTRING(" v") << mpt::transcode<mpt::ustring>( mpt::source_encoding, OPENMPT123_VERSION_STRING ) << lf; log << lf; - log << MPT_USTRING("Copyright (c) 2013-2025 OpenMPT Project Developers and Contributors <https://lib.openmpt.org/>") << lf; + log << MPT_USTRING("Copyright (c) 2013-2026 OpenMPT Project Developers and Contributors <https://lib.openmpt.org/>") << lf; } static void show_short_version( textout & log ) { diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libopenmpt-0.8.4+release.autotools/soundlib/Fastmix.cpp new/libopenmpt-0.8.6+release.autotools/soundlib/Fastmix.cpp --- old/libopenmpt-0.8.4+release.autotools/soundlib/Fastmix.cpp 2025-10-17 13:39:28.000000000 +0200 +++ new/libopenmpt-0.8.6+release.autotools/soundlib/Fastmix.cpp 2026-03-23 22:45:24.000000000 +0100 @@ -91,7 +91,10 @@ // Returns the buffer length required to render a certain amount of samples, based on the channel's playback speed. static MPT_FORCEINLINE uint32 DistanceToBufferLength(SamplePosition from, SamplePosition to, SamplePosition inc) { - return static_cast<uint32>((to - from - SamplePosition(1)) / inc) + 1; + if(from < to) + return static_cast<uint32>((to - from - SamplePosition(1)) / inc) + 1; + else + return 1; } // Check how many samples can be rendered without encountering loop or sample end, and also update loop position / direction @@ -227,16 +230,20 @@ { if(nPosInt >= lookaheadStart) { + // We are close to the loop end if(nInc.IsNegative()) { + // Going backward -> only go up to start of lookahead area nSmpCount = DistanceToBufferLength(SamplePosition(lookaheadStart, 0), nPos, nInv); chn.pCurrentSample = lookaheadPointer; } else if(nPosInt <= chn.nLoopEnd) { + // Going forward, approaching loop end -> only go up to end of loop nSmpCount = DistanceToBufferLength(nPos, SamplePosition(chn.nLoopEnd, 0), nInv); chn.pCurrentSample = lookaheadPointer; } else { + // We are already past the end of the loop nSmpCount = DistanceToBufferLength(nPos, SamplePosition(chn.nLength, 0), nInv); } checkDest = false; @@ -244,7 +251,7 @@ { // We just restarted the loop, so interpolate correctly after wrapping around nSmpCount = DistanceToBufferLength(nPos, SamplePosition(nLoopStart + InterpolationLookaheadBufferSize, 0), nInv); - chn.pCurrentSample = lookaheadPointer + (chn.nLength - nLoopStart) * chn.pModSample->GetBytesPerSample(); + chn.pCurrentSample = lookaheadPointer + (chn.nLoopEnd - nLoopStart) * chn.pModSample->GetBytesPerSample(); checkDest = false; } else if(nInc.IsPositive() && static_cast<SmpLength>(nPosDest) >= lookaheadStart && nSmpCount > 1) { diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libopenmpt-0.8.4+release.autotools/soundlib/Load_ult.cpp new/libopenmpt-0.8.6+release.autotools/soundlib/Load_ult.cpp --- old/libopenmpt-0.8.4+release.autotools/soundlib/Load_ult.cpp 2024-09-23 01:29:09.000000000 +0200 +++ new/libopenmpt-0.8.6+release.autotools/soundlib/Load_ult.cpp 2026-03-19 18:48:40.000000000 +0100 @@ -60,7 +60,7 @@ mptSmp.nLength = sizeEnd - sizeStart; mptSmp.nSustainStart = loopStart; - mptSmp.nSustainEnd = std::min(static_cast<SmpLength>(loopEnd), mptSmp.nLength); + mptSmp.nSustainEnd = loopEnd; mptSmp.nVolume = volume; mptSmp.nC5Speed = speed * 2; // Doubled to fit the note range diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libopenmpt-0.8.4+release.autotools/soundlib/Load_unic.cpp new/libopenmpt-0.8.6+release.autotools/soundlib/Load_unic.cpp --- old/libopenmpt-0.8.4+release.autotools/soundlib/Load_unic.cpp 2024-11-27 23:18:46.000000000 +0100 +++ new/libopenmpt-0.8.6+release.autotools/soundlib/Load_unic.cpp 2026-02-17 22:12:48.000000000 +0100 @@ -132,10 +132,7 @@ if(!headerValidationResult.totalSampleSize) return ProbeFailure; - if(pfilesize && *pfilesize < 1084 + headerValidationResult.numPatterns * 64u * 4u * 3u + headerValidationResult.totalSampleSize) - return ProbeFailure; - - return ProbeSuccess; + return ProbeAdditionalSize(file, pfilesize, (headerValidationResult.numPatterns - 1u) * 64u * 4u * 3u + headerValidationResult.totalSampleSize); } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libopenmpt-0.8.4+release.autotools/soundlib/Snd_fx.cpp new/libopenmpt-0.8.6+release.autotools/soundlib/Snd_fx.cpp --- old/libopenmpt-0.8.4+release.autotools/soundlib/Snd_fx.cpp 2025-10-17 13:41:56.000000000 +0200 +++ new/libopenmpt-0.8.6+release.autotools/soundlib/Snd_fx.cpp 2026-02-10 22:32:08.000000000 +0100 @@ -2315,7 +2315,7 @@ // Always NNA cut if(!(GetType() & (MOD_TYPE_IT | MOD_TYPE_MPT | MOD_TYPE_MT2)) || !m_nInstruments || forceCut) { - if(!srcChn.nLength || srcChn.dwFlags[CHN_MUTE] || !(srcChn.rightVol | srcChn.leftVol)) + if(srcChn.dwFlags[CHN_MUTE]) return CHANNELINDEX_INVALID; #ifndef NO_PLUGINS @@ -2323,6 +2323,9 @@ SendMIDINote(nChn, NOTE_KEYOFF, 0, m_playBehaviour[kMIDINotesFromChannelPlugin] ? pPlugin : nullptr); #endif // NO_PLUGINS + if(!srcChn.nLength || !(srcChn.rightVol | srcChn.leftVol)) + return CHANNELINDEX_INVALID; + if(srcChn.dwFlags[CHN_ADLIB] && m_opl) { m_opl->NoteCut(nChn, false); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libopenmpt-0.8.4+release.autotools/soundlib/Sndmix.cpp new/libopenmpt-0.8.6+release.autotools/soundlib/Sndmix.cpp --- old/libopenmpt-0.8.4+release.autotools/soundlib/Sndmix.cpp 2025-09-01 20:04:53.000000000 +0200 +++ new/libopenmpt-0.8.6+release.autotools/soundlib/Sndmix.cpp 2026-01-26 22:15:33.000000000 +0100 @@ -1619,7 +1619,7 @@ // Test case: ArpWraparound.mod, and the snare sound in "Jim is dead" by doh. if(note == NOTE_MIDDLEC + 24) { - period = int32_max; + period = 65536; // Period 0 is treated as period 65536 by the Paula chip return; } else if(note > NOTE_MIDDLEC + 24) { diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libopenmpt-0.8.4+release.autotools/src/mpt/LICENSE.BSD-3-Clause.txt new/libopenmpt-0.8.6+release.autotools/src/mpt/LICENSE.BSD-3-Clause.txt --- old/libopenmpt-0.8.4+release.autotools/src/mpt/LICENSE.BSD-3-Clause.txt 2024-12-31 11:10:08.000000000 +0100 +++ new/libopenmpt-0.8.6+release.autotools/src/mpt/LICENSE.BSD-3-Clause.txt 2026-01-01 09:07:51.000000000 +0100 @@ -1,4 +1,4 @@ -Copyright (c) 2004-2025, OpenMPT Project Developers and Contributors +Copyright (c) 2004-2026, OpenMPT Project Developers and Contributors Copyright (c) 1997-2003, Olivier Lapicque All rights reserved. diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libopenmpt-0.8.4+release.autotools/src/mpt/arch/x86_amd64.hpp new/libopenmpt-0.8.6+release.autotools/src/mpt/arch/x86_amd64.hpp --- old/libopenmpt-0.8.4+release.autotools/src/mpt/arch/x86_amd64.hpp 2025-10-16 13:12:53.000000000 +0200 +++ new/libopenmpt-0.8.6+release.autotools/src/mpt/arch/x86_amd64.hpp 2026-01-26 19:28:04.000000000 +0100 @@ -862,7 +862,7 @@ #endif // MPT_COMPILER } - [[nodiscard]] static bool detect_nexgen() noexcept { + [[nodiscard]] MPT_NOINLINE static bool detect_nexgen() noexcept { #if MPT_ARCH_X86 && MPT_COMPILER_MSVC @@ -916,7 +916,7 @@ #endif } - [[nodiscard]] static bool detect_cyrix() noexcept { + [[nodiscard]] MPT_NOINLINE static bool detect_cyrix() noexcept { #if MPT_ARCH_X86 && MPT_COMPILER_MSVC diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libopenmpt-0.8.4+release.autotools/src/mpt/base/detect_os.hpp new/libopenmpt-0.8.6+release.autotools/src/mpt/base/detect_os.hpp --- old/libopenmpt-0.8.4+release.autotools/src/mpt/base/detect_os.hpp 2025-10-06 08:06:16.000000000 +0200 +++ new/libopenmpt-0.8.6+release.autotools/src/mpt/base/detect_os.hpp 2026-02-14 09:52:18.000000000 +0100 @@ -48,6 +48,7 @@ // https://en.wikipedia.org/wiki/Windows_10_version_history // https://en.wikipedia.org/wiki/Windows_11_version_history // https://www.windowslatest.com/2021/09/03/windows-11-build-22449-is-now-available-with-new-loading-animation/ +// https://en.wikipedia.org/wiki/List_of_Microsoft_codenames#Windows_platform_engineering_milestones // Release NTDDI-version NTDDI-constant Release Build.Sub Codename Semester Semester Semester Marketing-Name min-SDK-Version WDK_NTDDI_VERSION // .Version Codename Date @@ -83,7 +84,8 @@ // MPT_WIN_MAKE_VERSION(0x0a, 0x00, 0x00, 0x0e) // NTDDI_WIN11_ZN 23H2 Zinc 23H2 10.0.26100.? NTDDI_WIN11_GE // MPT_WIN_MAKE_VERSION(0x0a, 0x00, 0x00, 0x0f) // NTDDI_WIN11_GA 24H1 Gallium 24H1 10.0.26100.? NTDDI_WIN11_GE #define MPT_WIN_11_24H2 MPT_WIN_MAKE_VERSION(0x0a, 0x00, 0x00, 0x10) // NTDDI_WIN11_GE Win11.24H2 26100 Hudson Valley Germanium R1 Germanium 24H2 2024 Update 10.0.26100.? NTDDI_WIN11_GE -// MPT_WIN_11_25H2 MPT_WIN_MAKE_VERSION(0x0a, 0x00, 0x00, 0x10) // Win11.24H2 26200 ? ? ? 25H2 2025 Update 10.0.26200.? NTDDI_WIN11_GE +// MPT_WIN_11_25H2 MPT_WIN_MAKE_VERSION(0x0a, 0x00, 0x00, 0x10) // Win11.25H2 26200 ? ? ? 25H2 2025 Update 10.0.26100.? NTDDI_WIN11_GE +// MPT_WIN_11_26H1 MPT_WIN_MAKE_VERSION(0x0a, 0x00, 0x00, 0x10) // Win11.26H1 28000 ? ? Bromine 26H2 10.0.26100.? NTDDI_WIN11_GE // MPT_WIN_API_DESKTOP : Windows 8/10 Desktop Application (Win32) // MPT_WIN_API_UNIVERSAL : Windows 10 Store App / Universal App @@ -101,20 +103,39 @@ #elif defined(__EMSCRIPTEN__) #define MPT_OS_EMSCRIPTEN 1 -#if !defined(__EMSCRIPTEN_major__) || !defined(__EMSCRIPTEN_minor__) || !defined(__EMSCRIPTEN_tiny__) +#if !defined(__EMSCRIPTEN_MAJOR__) || !defined(__EMSCRIPTEN_MINOR__) || !defined(__EMSCRIPTEN_TINY__) || !defined(__EMSCRIPTEN_major__) || !defined(__EMSCRIPTEN_minor__) || !defined(__EMSCRIPTEN_tiny__) #include <emscripten/version.h> #endif -#if defined(__EMSCRIPTEN_major__) && defined(__EMSCRIPTEN_minor__) -#if (__EMSCRIPTEN_major__ > 3) +#if defined(__EMSCRIPTEN_MAJOR__) +#define MPT_OS_EMSCRIPTEN_VERSION_MAJOR __EMSCRIPTEN_MAJOR__ +#elif defined(__EMSCRIPTEN_major__) +#define MPT_OS_EMSCRIPTEN_VERSION_MAJOR __EMSCRIPTEN_major__ +#else +#define MPT_OS_EMSCRIPTEN_VERSION_MAJOR 0 +#endif +#if defined(__EMSCRIPTEN_MINOR__) +#define MPT_OS_EMSCRIPTEN_VERSION_MINOR __EMSCRIPTEN_MINOR__ +#elif defined(__EMSCRIPTEN_minor__) +#define MPT_OS_EMSCRIPTEN_VERSION_MINOR __EMSCRIPTEN_minor__ +#else +#define MPT_OS_EMSCRIPTEN_VERSION_MINOR 0 +#endif +#if defined(__EMSCRIPTEN_TINY__) +#define MPT_OS_EMSCRIPTEN_VERSION_TINY __EMSCRIPTEN_TINY__ +#elif defined(__EMSCRIPTEN_tiny__) +#define MPT_OS_EMSCRIPTEN_VERSION_TINY __EMSCRIPTEN_tiny__ +#else +#define MPT_OS_EMSCRIPTEN_VERSION_TINY 0 +#endif +#if (MPT_OS_EMSCRIPTEN_VERSION_MAJOR > 3) // ok -#elif (__EMSCRIPTEN_major__ == 3) && (__EMSCRIPTEN_minor__ > 1) +#elif (MPT_OS_EMSCRIPTEN_VERSION_MAJOR == 3) && (MPT_OS_EMSCRIPTEN_VERSION_MINOR > 1) // ok -#elif (__EMSCRIPTEN_major__ == 3) && (__EMSCRIPTEN_minor__ == 1) && (__EMSCRIPTEN_tiny__ >= 51) +#elif (MPT_OS_EMSCRIPTEN_VERSION_MAJOR == 3) && (MPT_OS_EMSCRIPTEN_VERSION_MINOR == 1) && (MPT_OS_EMSCRIPTEN_VERSION_TINY >= 51) // ok #else #error "Emscripten >= 3.1.51 is required." #endif -#endif #elif defined(__CYGWIN__) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libopenmpt-0.8.4+release.autotools/src/mpt/base/macros.hpp new/libopenmpt-0.8.6+release.autotools/src/mpt/base/macros.hpp --- old/libopenmpt-0.8.4+release.autotools/src/mpt/base/macros.hpp 2024-12-30 17:42:05.000000000 +0100 +++ new/libopenmpt-0.8.6+release.autotools/src/mpt/base/macros.hpp 2025-12-14 17:40:37.000000000 +0100 @@ -155,8 +155,9 @@ #define MPT_MAYBE_CONSTANT_IF(x) \ _Pragma("clang diagnostic push") \ _Pragma("clang diagnostic ignored \"-Wunknown-pragmas\"") \ - _Pragma("clang diagnostic ignored \"-Wtype-limits\"") \ + _Pragma("clang diagnostic ignored \"-Wunreachable-code\"") \ _Pragma("clang diagnostic ignored \"-Wtautological-constant-out-of-range-compare\"") \ + _Pragma("clang diagnostic ignored \"-Wtype-limits\"") \ if (x) \ _Pragma("clang diagnostic pop") \ /**/ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libopenmpt-0.8.4+release.autotools/src/mpt/osinfo/windows_version.hpp new/libopenmpt-0.8.6+release.autotools/src/mpt/osinfo/windows_version.hpp --- old/libopenmpt-0.8.4+release.autotools/src/mpt/osinfo/windows_version.hpp 2025-10-06 08:06:16.000000000 +0200 +++ new/libopenmpt-0.8.6+release.autotools/src/mpt/osinfo/windows_version.hpp 2026-02-13 14:38:20.000000000 +0100 @@ -132,6 +132,8 @@ static mpt::osinfo::windows::Version FromSDK() noexcept { // Initialize to used SDK version #if 0 +//#elif MPT_WINNT_AT_LEAST(MPT_WIN_11_26H1) +// return mpt::osinfo::windows::Version(mpt::osinfo::windows::Version::Win10, mpt::osinfo::windows::Version::ServicePack(0, 0), 28000, 0); //#elif MPT_WINNT_AT_LEAST(MPT_WIN_11_25H2) // return mpt::osinfo::windows::Version(mpt::osinfo::windows::Version::Win10, mpt::osinfo::windows::Version::ServicePack(0, 0), 26200, 0); #elif MPT_WINNT_AT_LEAST(MPT_WIN_11_24H2) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libopenmpt-0.8.4+release.autotools/src/mpt/osinfo/windows_wine_version.hpp new/libopenmpt-0.8.6+release.autotools/src/mpt/osinfo/windows_wine_version.hpp --- old/libopenmpt-0.8.4+release.autotools/src/mpt/osinfo/windows_wine_version.hpp 2022-07-15 17:00:38.000000000 +0200 +++ new/libopenmpt-0.8.6+release.autotools/src/mpt/osinfo/windows_wine_version.hpp 2026-01-10 18:19:35.000000000 +0100 @@ -7,6 +7,7 @@ #include "mpt/base/detect.hpp" #include "mpt/base/integer.hpp" +#include "mpt/base/macros.hpp" #include "mpt/base/namespace.hpp" #include "mpt/osinfo/windows_version.hpp" diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libopenmpt-0.8.4+release.autotools/src/mpt/string_transcode/transcode.hpp new/libopenmpt-0.8.6+release.autotools/src/mpt/string_transcode/transcode.hpp --- old/libopenmpt-0.8.4+release.autotools/src/mpt/string_transcode/transcode.hpp 2025-06-02 16:31:46.000000000 +0200 +++ new/libopenmpt-0.8.6+release.autotools/src/mpt/string_transcode/transcode.hpp 2025-12-21 22:52:13.000000000 +0100 @@ -819,6 +819,8 @@ std::size_t charsleft = numchars; while (charsleft > 0) { if (charsleft == numchars) { + // cppcheck false-positive + // cppcheck-suppress arrayIndexOutOfBounds out.push_back(static_cast<uint8>(utf8[charsleft - 1] | (((1 << numchars) - 1) << (8 - numchars)))); } else { // cppcheck false-positive diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libopenmpt-0.8.4+release.autotools/test/test.cpp new/libopenmpt-0.8.6+release.autotools/test/test.cpp --- old/libopenmpt-0.8.4+release.autotools/test/test.cpp 2025-09-21 19:05:04.000000000 +0200 +++ new/libopenmpt-0.8.6+release.autotools/test/test.cpp 2026-01-15 15:41:19.000000000 +0100 @@ -193,8 +193,8 @@ { #ifdef LIBOPENMPT_BUILD std::cout << "libopenmpt test suite starting." << std::endl; - std::cout << "libopenmpt library version: " << std::hex << std::setfill('0') << std::setw(8) << openmpt::get_library_version() << std::endl; - std::cout << "libopenmpt core version: " << std::hex << std::setfill('0') << std::setw(8) << openmpt::get_core_version() << std::endl; + std::cout << "libopenmpt library version: " << std::hex << std::setfill('0') << std::setw(8) << openmpt::get_library_version() << std::dec << std::endl; + std::cout << "libopenmpt core version: " << std::hex << std::setfill('0') << std::setw(8) << openmpt::get_core_version() << std::dec << std::endl; std::cout << "libopenmpt library_version: " << openmpt::string::get("library_version") << std::endl; std::cout << "libopenmpt library_features: " << openmpt::string::get("library_features") << std::endl; std::cout << "libopenmpt core_version: " << openmpt::string::get("core_version") << std::endl; @@ -300,7 +300,7 @@ } return result; }; - std::cout << "FCW: " << std::hex << std::setfill('0') << std::setw(4) << fpstate.x87fcw << std::endl; + std::cout << "FCW: " << std::hex << std::setfill('0') << std::setw(4) << fpstate.x87fcw << std::dec << std::endl; std::cout << " " << format_rounding(fpstate.x87fcw); std::cout << " " << format_precision(fpstate.x87fcw); if (fpstate.x87_level <= 2) { @@ -329,7 +329,7 @@ } return result; }; - std::cout << "MXCSR (mask): " << std::hex << std::setfill('0') << std::setw(8) << fpstate.mxcsr << " (" << std::hex << std::setfill('0') << std::setw(8) << fpstate.mxcsr_mask << ")" << std::endl; + std::cout << "MXCSR (mask): " << std::hex << std::setfill('0') << std::setw(8) << fpstate.mxcsr << std::dec << " (" << std::hex << std::setfill('0') << std::setw(8) << fpstate.mxcsr_mask << std::dec << ")" << std::endl; std::cout << " " << format_rounding(fpstate.mxcsr); if(fpstate.mxcsr & fpstate.mxcsr_mask & mpt::arch::x86::floating_point::MXCSR_FTZ) {
