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-11-03 17:52:44 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/libopenmpt (Old) and /work/SRC/openSUSE:Factory/.libopenmpt.new.1257 (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "libopenmpt" Tue Nov 3 17:52:44 2026 rev:61 rq:1394412 version:0.8.10 Changes: -------- --- /work/SRC/openSUSE:Factory/libopenmpt/libopenmpt.changes 2026-08-25 13:18:19.515227557 +0200 +++ /work/SRC/openSUSE:Factory/.libopenmpt.new.1257/libopenmpt.changes 2026-11-03 17:53:12.661415813 +0100 @@ -1,0 +2,10 @@ +Sun Nov 1 13:11:32 UTC 2026 - Martin Hauke <[email protected]> + +- Update to version 0.8.10 + * [Sec] Possible heap out-of-bounds write when loading SymMOD + files containing WAV IMA ADPCM samples (r25623, r25645). + See also https://github.com/OpenMPT/openmpt/security/advisories/GHSA-fxf7-wc37-p2cx + * [Sec] Possible heap out-of-bounds read when loading custom + tunings from MPTM files (r25609, r25615). + +------------------------------------------------------------------- Old: ---- libopenmpt-0.8.9+release.autotools.tar.gz New: ---- libopenmpt-0.8.10+release.autotools.tar.gz ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ libopenmpt.spec ++++++ --- /var/tmp/diff_new_pack.EWHWjf/_old 2026-11-03 17:53:13.954469862 +0100 +++ /var/tmp/diff_new_pack.EWHWjf/_new 2026-11-03 17:53:13.959470071 +0100 @@ -18,10 +18,10 @@ %define libopenmpt libopenmpt0 %define libopenmpt_modplug libopenmpt_modplug1 -%define libopenmpt_modplug_version 0.8.9.0 +%define libopenmpt_modplug_version 0.8.10.0 Name: libopenmpt -Version: 0.8.9 +Version: 0.8.10 Release: 0 Summary: C++ and C library to decode tracker music files License: BSD-3-Clause ++++++ libopenmpt-0.8.9+release.autotools.tar.gz -> libopenmpt-0.8.10+release.autotools.tar.gz ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libopenmpt-0.8.9+release.autotools/common/versionNumber.h new/libopenmpt-0.8.10+release.autotools/common/versionNumber.h --- old/libopenmpt-0.8.9+release.autotools/common/versionNumber.h 2026-08-18 23:11:45.000000000 +0200 +++ new/libopenmpt-0.8.10+release.autotools/common/versionNumber.h 2026-10-31 19:17:18.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 11 -#define VER_MINORMINOR 02 +#define VER_MINOR 12 +#define VER_MINORMINOR 00 diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libopenmpt-0.8.9+release.autotools/configure new/libopenmpt-0.8.10+release.autotools/configure --- old/libopenmpt-0.8.9+release.autotools/configure 2026-08-19 11:21:40.000000000 +0200 +++ new/libopenmpt-0.8.10+release.autotools/configure 2026-10-31 22:31:30.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.9+release.autotools. +# Generated by GNU Autoconf 2.71 for libopenmpt 0.8.10+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.9+release.autotools' -PACKAGE_STRING='libopenmpt 0.8.9+release.autotools' +PACKAGE_VERSION='0.8.10+release.autotools' +PACKAGE_STRING='libopenmpt 0.8.10+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.9+release.autotools to adapt to many kinds of systems. +\`configure' configures libopenmpt 0.8.10+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.9+release.autotools:";; + short | recursive ) echo "Configuration of libopenmpt 0.8.10+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.9+release.autotools +libopenmpt configure 0.8.10+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.9+release.autotools, which was +It was created by libopenmpt $as_me 0.8.10+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.9+release.autotools' + VERSION='0.8.10+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.9\"" >>confdefs.h +printf "%s\n" "#define MPT_SVNURL \"https://source.openmpt.org/svn/openmpt/tags/libopenmpt-0.8.10\"" >>confdefs.h -printf "%s\n" "#define MPT_SVNVERSION \"25652\"" >>confdefs.h +printf "%s\n" "#define MPT_SVNVERSION \"25841\"" >>confdefs.h -printf "%s\n" "#define MPT_SVNDATE \"2026-08-19T07:15:57.388610Z\"" >>confdefs.h +printf "%s\n" "#define MPT_SVNDATE \"2026-10-31T18:27:32.287400Z\"" >>confdefs.h printf "%s\n" "#define MPT_PACKAGE true" >>confdefs.h @@ -27168,7 +27168,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.9+release.autotools, which was +This file was extended by libopenmpt $as_me 0.8.10+release.autotools, which was generated by GNU Autoconf 2.71. Invocation command line was CONFIG_FILES = $CONFIG_FILES @@ -27228,7 +27228,7 @@ cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_cs_config='$ac_cs_config_escaped' ac_cs_version="\\ -libopenmpt config.status 0.8.9+release.autotools +libopenmpt config.status 0.8.10+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.9+release.autotools/configure.ac new/libopenmpt-0.8.10+release.autotools/configure.ac --- old/libopenmpt-0.8.9+release.autotools/configure.ac 2026-08-19 11:21:10.000000000 +0200 +++ new/libopenmpt-0.8.10+release.autotools/configure.ac 2026-10-31 22:31:00.000000000 +0100 @@ -1,4 +1,4 @@ -AC_INIT([libopenmpt], [0.8.9+release.autotools], [https://bugs.openmpt.org/], [libopenmpt], [https://lib.openmpt.org/]) +AC_INIT([libopenmpt], [0.8.10+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.9"], [svn version]) -AC_DEFINE([MPT_SVNVERSION], ["25652"], [svn version]) -AC_DEFINE([MPT_SVNDATE], ["2026-08-19T07:15:57.388610Z"], [svn date]) +AC_DEFINE([MPT_SVNURL], ["https://source.openmpt.org/svn/openmpt/tags/libopenmpt-0.8.10"], [svn version]) +AC_DEFINE([MPT_SVNVERSION], ["25841"], [svn version]) +AC_DEFINE([MPT_SVNDATE], ["2026-10-31T18:27:32.287400Z"], [svn date]) AC_DEFINE([MPT_PACKAGE], [true], [is package]) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libopenmpt-0.8.9+release.autotools/doc/libopenmpt/changelog.md new/libopenmpt-0.8.10+release.autotools/doc/libopenmpt/changelog.md --- old/libopenmpt-0.8.9+release.autotools/doc/libopenmpt/changelog.md 2026-08-19 09:15:55.000000000 +0200 +++ new/libopenmpt-0.8.10+release.autotools/doc/libopenmpt/changelog.md 2026-10-31 19:27:30.000000000 +0100 @@ -5,6 +5,18 @@ For fully detailed change log, please see the source repository directly. This is just a high-level summary. +### libopenmpt 0.8.10 (2026-10-31) + + * [**Sec**] SymMOD: Potential divison by 0 when trying to decode an embedded + IMA ADPCM WAV sample claiming to contain 0 audio channels (r25831). + + * [**Bug**] SymMOD: It was possible that a fact chunk of an embedded WAV file + claimed an impossibly big sample length for an IMA ADPCM sample, causing + unnecessarily large memory allocations. + + * Volume column portamento effect memory was not updated properly during + seeking, causing notes to continue playing at the wrong pitch. + ### libopenmpt 0.8.9 (2026-08-19) * [**Sec**] Possible heap out-of-bounds write when loading SymMOD files diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libopenmpt-0.8.9+release.autotools/libopenmpt/libopenmpt_version.h new/libopenmpt-0.8.10+release.autotools/libopenmpt/libopenmpt_version.h --- old/libopenmpt-0.8.9+release.autotools/libopenmpt/libopenmpt_version.h 2026-08-19 09:15:55.000000000 +0200 +++ new/libopenmpt-0.8.10+release.autotools/libopenmpt/libopenmpt_version.h 2026-10-31 19:27:30.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 9 +#define OPENMPT_API_VERSION_PATCH 10 /*! \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.9+release.autotools/libopenmpt/libopenmpt_version.mk new/libopenmpt-0.8.10+release.autotools/libopenmpt/libopenmpt_version.mk --- old/libopenmpt-0.8.9+release.autotools/libopenmpt/libopenmpt_version.mk 2026-08-19 09:15:55.000000000 +0200 +++ new/libopenmpt-0.8.10+release.autotools/libopenmpt/libopenmpt_version.mk 2026-10-31 19:27:30.000000000 +0100 @@ -1,8 +1,8 @@ LIBOPENMPT_VERSION_MAJOR=0 LIBOPENMPT_VERSION_MINOR=8 -LIBOPENMPT_VERSION_PATCH=9 +LIBOPENMPT_VERSION_PATCH=10 LIBOPENMPT_VERSION_PREREL= LIBOPENMPT_LTVER_CURRENT=5 -LIBOPENMPT_LTVER_REVISION=9 +LIBOPENMPT_LTVER_REVISION=10 LIBOPENMPT_LTVER_AGE=5 diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libopenmpt-0.8.9+release.autotools/man/openmpt123.1 new/libopenmpt-0.8.10+release.autotools/man/openmpt123.1 --- old/libopenmpt-0.8.9+release.autotools/man/openmpt123.1 2026-08-19 11:21:08.000000000 +0200 +++ new/libopenmpt-0.8.10+release.autotools/man/openmpt123.1 2026-10-31 22:30:59.000000000 +0100 @@ -1,12 +1,12 @@ .\" DO NOT MODIFY THIS FILE! It was generated by help2man 1.49.3. -.TH OPENMPT123 "1" "August 2026" "openmpt123 v0.8.9" "User Commands" +.TH OPENMPT123 "1" "October 2026" "openmpt123 v0.8.10" "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.9, libopenmpt 0.8.9+r25652 (OpenMPT 1.32.11.02\-r25652 https://source.openmpt.org/svn/openmpt/tags/libopenmpt\-0.8.9@25652 (2026\-08\-19T07:15:57.388610Z) clean) +openmpt123 v0.8.10, libopenmpt 0.8.10+r25841 (OpenMPT 1.32.12.00 https://source.openmpt.org/svn/openmpt/tags/libopenmpt\-0.8.10@25841 (2026\-10\-31T18:27:32.287400Z) clean) Copyright \(co 2013\-2026 OpenMPT Project Developers and Contributors <https://lib.openmpt.org/> .PP openmpt123 plays module music files. diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libopenmpt-0.8.9+release.autotools/soundlib/Dlsbank.cpp new/libopenmpt-0.8.10+release.autotools/soundlib/Dlsbank.cpp --- old/libopenmpt-0.8.9+release.autotools/soundlib/Dlsbank.cpp 2024-12-26 20:11:29.000000000 +0100 +++ new/libopenmpt-0.8.10+release.autotools/soundlib/Dlsbank.cpp 2026-10-09 15:45:48.000000000 +0200 @@ -1128,7 +1128,7 @@ sampleType = (sampleType & 0xFFFC) | 0x10; dlsSmp.compressed = (sampleType & 0x10); - if(((sampleType & 0x7FCF) <= 4) && (p.dwEnd >= p.dwStart + 4)) + if(((sampleType & 0x7FCF) <= 8) && (p.dwEnd >= p.dwStart + 4)) { m_WaveForms[i] = p.dwStart; dlsSmp.dwLen = (p.dwEnd - p.dwStart); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libopenmpt-0.8.9+release.autotools/soundlib/Snd_fx.cpp new/libopenmpt-0.8.10+release.autotools/soundlib/Snd_fx.cpp --- old/libopenmpt-0.8.9+release.autotools/soundlib/Snd_fx.cpp 2026-07-12 16:10:37.000000000 +0200 +++ new/libopenmpt-0.8.10+release.autotools/soundlib/Snd_fx.cpp 2026-10-09 15:44:14.000000000 +0200 @@ -148,9 +148,13 @@ } break; case VOLCMD_PORTAUP: + if(sndFile.m_playBehaviour[kITDoublePortamentoSlides]) + chn.nOldPortaUp = chn.nOldPortaDown = m.vol << 2; sndFile.PortamentoUp(*state, channel, static_cast<ModCommand::PARAM>(m.vol << 2), sndFile.m_playBehaviour[kITVolColFinePortamento]); break; case VOLCMD_PORTADOWN: + if(sndFile.m_playBehaviour[kITDoublePortamentoSlides]) + chn.nOldPortaUp = chn.nOldPortaDown = m.vol << 2; sndFile.PortamentoDown(*state, channel, static_cast<ModCommand::PARAM>(m.vol << 2), sndFile.m_playBehaviour[kITVolColFinePortamento]); break; default: diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libopenmpt-0.8.9+release.autotools/soundlib/WAVTools.cpp new/libopenmpt-0.8.10+release.autotools/soundlib/WAVTools.cpp --- old/libopenmpt-0.8.9+release.autotools/soundlib/WAVTools.cpp 2026-08-18 23:03:51.000000000 +0200 +++ new/libopenmpt-0.8.10+release.autotools/soundlib/WAVTools.cpp 2026-10-29 22:44:41.000000000 +0100 @@ -70,7 +70,8 @@ // Read format chunk FileReader formatChunk = chunks.GetChunk(RIFFChunk::idfmt_); - if(!formatChunk.ReadStruct(formatInfo)) + if(!formatChunk.ReadStruct(formatInfo) + || formatInfo.numChannels == 0) { return; } @@ -104,11 +105,12 @@ sampleData = chunks.GetChunk(RIFFChunk::idpcm_); } - // "fact" chunk should contain sample length of compressed samples. - sampleLength = chunks.GetChunk(RIFFChunk::idfact).ReadUint32LE(); - - if((formatInfo.format == WAVFormatChunk::fmtIMA_ADPCM) && (GetBlockAlign() > 0)) + sampleLength = 0; + if((formatInfo.format == WAVFormatChunk::fmtIMA_ADPCM) && (GetBlockAlign() >= 4 * formatInfo.numChannels)) { + // "fact" chunk should contain sample length of compressed samples. + sampleLength = chunks.GetChunk(RIFFChunk::idfact).ReadUint32LE(); + FileReader::pos_type dataLength = sampleData.GetLength(); std::size_t blocks = mpt::align_up<FileReader::pos_type>(dataLength, GetBlockAlign()) / GetBlockAlign(); std::size_t framesPerBlock = ((GetBlockAlign() - (4 * formatInfo.numChannels)) * 2 / formatInfo.numChannels) + 1; @@ -124,6 +126,7 @@ sampleLength *= 2; } } + LimitMax(sampleLength, expectedLengthFrames); } if((formatInfo.format != WAVFormatChunk::fmtIMA_ADPCM || sampleLength == 0) && GetSampleSize() != 0) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libopenmpt-0.8.9+release.autotools/src/mpt/arch/feature_fence.hpp new/libopenmpt-0.8.10+release.autotools/src/mpt/arch/feature_fence.hpp --- old/libopenmpt-0.8.9+release.autotools/src/mpt/arch/feature_fence.hpp 2025-07-18 20:04:08.000000000 +0200 +++ new/libopenmpt-0.8.10+release.autotools/src/mpt/arch/feature_fence.hpp 2026-10-23 14:38:01.000000000 +0200 @@ -7,6 +7,7 @@ #include "mpt/base/detect.hpp" #include "mpt/base/macros.hpp" #include "mpt/base/namespace.hpp" +#include "mpt/base/utility.hpp" #include <atomic> @@ -22,11 +23,11 @@ MPT_FORCEINLINE void feature_fence_aquire() noexcept { - std::atomic_signal_fence(std::memory_order_acquire); + mpt::compiler_barrier(std::memory_order_acquire); } MPT_FORCEINLINE void feature_fence_release() noexcept { - std::atomic_signal_fence(std::memory_order_release); + mpt::compiler_barrier(std::memory_order_release); } class feature_fence_guard { diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libopenmpt-0.8.9+release.autotools/src/mpt/base/detect_os.hpp new/libopenmpt-0.8.10+release.autotools/src/mpt/base/detect_os.hpp --- old/libopenmpt-0.8.9+release.autotools/src/mpt/base/detect_os.hpp 2026-05-13 13:20:21.000000000 +0200 +++ new/libopenmpt-0.8.10+release.autotools/src/mpt/base/detect_os.hpp 2026-10-03 10:53:10.000000000 +0200 @@ -87,6 +87,7 @@ // MPT_WIN_MAKE_VERSION(0x0a, 0x00, 0x00, 0x10) // 25H1 Dilithium 25H1 10.0.28000.? NTDDI_WIN11_BR #define MPT_WIN_11_25H2 MPT_WIN_MAKE_VERSION(0x0a, 0x00, 0x00, 0x11) // NTDDI_WIN11_DT Win11.25H2 26200 Hudson Valley 2 ? ? 25H2 2025 Update 10.0.28000.? NTDDI_WIN11_BR #define MPT_WIN_11_26H1 MPT_WIN_MAKE_VERSION(0x0a, 0x00, 0x00, 0x12) // NTDDI_WIN11_BR Win11.26H1 28000 ? ? Bromine 26H2 10.0.28000.? NTDDI_WIN11_BR +// MPT_WIN_11_26H2 MPT_WIN_MAKE_VERSION(0x0a, 0x00, 0x00, 0x11) // NTDDI_WIN11_DT Win11.26H2 26300 ? ? ? 26H2 2026 Update 10.0.28000.? NTDDI_WIN11_BR // MPT_WIN_API_DESKTOP : Windows 8/10 Desktop Application (Win32) // MPT_WIN_API_UNIVERSAL : Windows 10 Store App / Universal App diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libopenmpt-0.8.9+release.autotools/src/mpt/base/secure.hpp new/libopenmpt-0.8.10+release.autotools/src/mpt/base/secure.hpp --- old/libopenmpt-0.8.9+release.autotools/src/mpt/base/secure.hpp 2022-08-31 18:51:32.000000000 +0200 +++ new/libopenmpt-0.8.10+release.autotools/src/mpt/base/secure.hpp 2026-10-23 14:38:25.000000000 +0200 @@ -8,8 +8,8 @@ #include "mpt/base/integer.hpp" #include "mpt/base/macros.hpp" #include "mpt/base/namespace.hpp" +#include "mpt/base/utility.hpp" -#include <atomic> #include <utility> #include <vector> @@ -24,13 +24,13 @@ // C23 memset_explicit inline MPT_NOINLINE void * memset_explicit(void * const dst, int const value, std::size_t const len) noexcept { - std::atomic_thread_fence(std::memory_order_seq_cst); + mpt::full_barrier(); volatile unsigned char * volatile p = static_cast<volatile unsigned char *>(dst); - std::atomic_thread_fence(std::memory_order_seq_cst); + mpt::full_barrier(); for (volatile std::size_t i = 0; i < len; ++i) { p[i] = static_cast<unsigned char>(value); } - std::atomic_thread_fence(std::memory_order_seq_cst); + mpt::full_barrier(); return dst; } @@ -41,54 +41,54 @@ inline MPT_NOINLINE void memzero(std::byte * const dst, std::size_t const len) noexcept { - std::atomic_thread_fence(std::memory_order_seq_cst); + mpt::full_barrier(); volatile std::byte * volatile p = static_cast<volatile std::byte *>(dst); - std::atomic_thread_fence(std::memory_order_seq_cst); + mpt::full_barrier(); for (volatile std::size_t i = 0; i < len; ++i) { p[i] = std::byte{0}; } - std::atomic_thread_fence(std::memory_order_seq_cst); + mpt::full_barrier(); } inline MPT_NOINLINE void memzero(void * const dst, std::size_t const len) noexcept { - std::atomic_thread_fence(std::memory_order_seq_cst); + mpt::full_barrier(); volatile std::byte * volatile p = static_cast<volatile std::byte *>(dst); - std::atomic_thread_fence(std::memory_order_seq_cst); + mpt::full_barrier(); for (volatile std::size_t i = 0; i < len; ++i) { p[i] = std::byte{0}; } - std::atomic_thread_fence(std::memory_order_seq_cst); + mpt::full_barrier(); } inline MPT_NOINLINE void memzero(char * const dst, std::size_t const len) noexcept { - std::atomic_thread_fence(std::memory_order_seq_cst); + mpt::full_barrier(); volatile std::byte * volatile p = reinterpret_cast<volatile std::byte *>(dst); - std::atomic_thread_fence(std::memory_order_seq_cst); + mpt::full_barrier(); for (volatile std::size_t i = 0; i < len; ++i) { p[i] = std::byte{0}; } - std::atomic_thread_fence(std::memory_order_seq_cst); + mpt::full_barrier(); } inline MPT_NOINLINE void memzero(uint8 * const dst, std::size_t const len) noexcept { - std::atomic_thread_fence(std::memory_order_seq_cst); + mpt::full_barrier(); volatile std::byte * volatile p = reinterpret_cast<volatile std::byte *>(dst); - std::atomic_thread_fence(std::memory_order_seq_cst); + mpt::full_barrier(); for (volatile std::size_t i = 0; i < len; ++i) { p[i] = std::byte{0}; } - std::atomic_thread_fence(std::memory_order_seq_cst); + mpt::full_barrier(); } template <typename T> inline MPT_NOINLINE void clear(T & val) { - std::atomic_signal_fence(std::memory_order_seq_cst); + mpt::full_barrier(); volatile T * volatile v = &val; - std::atomic_thread_fence(std::memory_order_seq_cst); + mpt::full_barrier(); *v = T{}; - std::atomic_signal_fence(std::memory_order_seq_cst); + mpt::full_barrier(); } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libopenmpt-0.8.9+release.autotools/src/mpt/base/utility.hpp new/libopenmpt-0.8.10+release.autotools/src/mpt/base/utility.hpp --- old/libopenmpt-0.8.9+release.autotools/src/mpt/base/utility.hpp 2025-03-12 19:15:00.000000000 +0100 +++ new/libopenmpt-0.8.10+release.autotools/src/mpt/base/utility.hpp 2026-10-23 14:37:37.000000000 +0200 @@ -13,6 +13,9 @@ #include "mpt/base/saturate_round.hpp" #endif +#if MPT_CXX_BEFORE(26) +#include <atomic> +#endif #if MPT_CXX_BEFORE(23) && !MPT_COMPILER_MSVC && !MPT_COMPILER_GCC && !MPT_COMPILER_CLANG #include <exception> #endif @@ -257,6 +260,70 @@ +#if MPT_CXX_AT_LEAST(26) + +using std::observable_checkpoint; + +#else // !C++26 + +#if MPT_COMPILER_MSVC +inline void observable_checkpoint() { + _ReadWriteBarrier(); +} +#elif MPT_COMPILER_GCC || MPT_COMPILER_CLANG +inline void observable_checkpoint() { + // clang-format off + __asm__ __volatile__("" ::: "memory"); + // clang-format on +} +#else +inline void observable_checkpoint() { + std::atomic_signal_fence(std::memory_order_release); +} +#endif + +#endif // C++26 + + + +inline void compiler_barrier(std::memory_order order) { +#if MPT_COMPILER_CLANG + // clang-format off + __asm__ __volatile__("" ::: "memory"); + // clang-format on +#endif + std::atomic_signal_fence(order); +#if MPT_COMPILER_CLANG + // clang-format off + __asm__ __volatile__("" ::: "memory"); + // clang-format on +#endif +} + + + +inline void cpu_barrier(std::memory_order order) { + std::atomic_thread_fence(order); +} + + + +inline void full_barrier() { +#if MPT_COMPILER_CLANG + // clang-format off + __asm__ __volatile__("" ::: "memory"); + // clang-format on + std::atomic_thread_fence(std::memory_order_seq_cst); + // clang-format off + __asm__ __volatile__("" ::: "memory"); + // clang-format on +#else + std::atomic_thread_fence(std::memory_order_seq_cst); +#endif +} + + + } // namespace MPT_INLINE_NS } // namespace mpt diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libopenmpt-0.8.9+release.autotools/src/mpt/osinfo/windows_version.hpp new/libopenmpt-0.8.10+release.autotools/src/mpt/osinfo/windows_version.hpp --- old/libopenmpt-0.8.9+release.autotools/src/mpt/osinfo/windows_version.hpp 2026-05-13 13:24:07.000000000 +0200 +++ new/libopenmpt-0.8.10+release.autotools/src/mpt/osinfo/windows_version.hpp 2026-10-03 10:54:02.000000000 +0200 @@ -134,6 +134,8 @@ #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_26H2) +// return mpt::osinfo::windows::Version(mpt::osinfo::windows::Version::Win10, mpt::osinfo::windows::Version::ServicePack(0, 0), 26300, 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)
