Script 'mail_helper' called by obssrc
Hello community,
here is the log from the commit of package libopenmpt for openSUSE:Factory checked in at 2024-04-02 16:37:35
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/libopenmpt (Old)
and /work/SRC/openSUSE:Factory/.libopenmpt.new.1905 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "libopenmpt"
Tue Apr 2 16:37:35 2024 rev:46 rq:1163533 version:0.7.6
Changes:
--------
--- /work/SRC/openSUSE:Factory/libopenmpt/libopenmpt.changes 2024-03-18 16:43:47.725268304 +0100
+++ /work/SRC/openSUSE:Factory/.libopenmpt.new.1905/libopenmpt.changes 2024-04-02 16:37:36.174596628 +0200
@@ -1,0 +2,16 @@
+Fri Mar 29 12:38:51 UTC 2024 - Mia Herkt
+
+- Update to 0.7.6:
+ * [Sec] Potential heap out-of-bounds read or write past sample
+ end with malformed sustain loops in SymMOD files.
+ * MED: Transposed samples were playing too low in some files
+ (e.g. mix94.mmd1).
+ * OKT: Some files with garbage at the end were rejected
+ (e.g. katharsis - piano lesson.okta).
+ * Compressor DMO: It was possible that the plugin would not
+ behave as intended at mix rates above 500 kHz.
+ * Avoid re-allocating the loop state map contents on every
+ playthrough of the module.
+- Run test suite during package build
+
+-------------------------------------------------------------------
Old:
----
libopenmpt-0.7.5+release.autotools.tar.gz
New:
----
libopenmpt-0.7.6+release.autotools.tar.gz
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ libopenmpt.spec ++++++
--- /var/tmp/diff_new_pack.YLbpAC/_old 2024-04-02 16:37:38.898697017 +0200
+++ /var/tmp/diff_new_pack.YLbpAC/_new 2024-04-02 16:37:38.910697459 +0200
@@ -21,7 +21,7 @@
%define libopenmpt_modplug_version 0.8.9.0
Name: libopenmpt
-Version: 0.7.5
+Version: 0.7.6
Release: 0
Summary: C++ and C library to decode tracker music files
License: BSD-3-Clause
@@ -111,12 +111,15 @@
--with-flac \
--with-portaudio \
--with-sdl2
-make %{?_smp_mflags}
+%make_build
%install
%make_install
find %{buildroot} -type f -name "*.la" -delete -print
+%check
+%make_build check
+
%post -n %{libopenmpt} -p /sbin/ldconfig
%postun -n %{libopenmpt} -p /sbin/ldconfig
++++++ libopenmpt-0.7.5+release.autotools.tar.gz -> libopenmpt-0.7.6+release.autotools.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libopenmpt-0.7.5+release.autotools/common/versionNumber.h new/libopenmpt-0.7.6+release.autotools/common/versionNumber.h
--- old/libopenmpt-0.7.5+release.autotools/common/versionNumber.h 2024-03-17 08:42:51.000000000 +0100
+++ new/libopenmpt-0.7.6+release.autotools/common/versionNumber.h 2024-03-24 13:08:54.000000000 +0100
@@ -17,7 +17,7 @@
// Version definitions. The only thing that needs to be changed when changing version number.
#define VER_MAJORMAJOR 1
#define VER_MAJOR 31
-#define VER_MINOR 05
-#define VER_MINORMINOR 02
+#define VER_MINOR 06
+#define VER_MINORMINOR 00
OPENMPT_NAMESPACE_END
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libopenmpt-0.7.5+release.autotools/configure new/libopenmpt-0.7.6+release.autotools/configure
--- old/libopenmpt-0.7.5+release.autotools/configure 2024-03-17 09:49:51.000000000 +0100
+++ new/libopenmpt-0.7.6+release.autotools/configure 2024-03-24 14:26:48.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.7.5+release.autotools.
+# Generated by GNU Autoconf 2.71 for libopenmpt 0.7.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.7.5+release.autotools'
-PACKAGE_STRING='libopenmpt 0.7.5+release.autotools'
+PACKAGE_VERSION='0.7.6+release.autotools'
+PACKAGE_STRING='libopenmpt 0.7.6+release.autotools'
PACKAGE_BUGREPORT='https://bugs.openmpt.org/'
PACKAGE_URL='https://lib.openmpt.org/'
@@ -1510,7 +1510,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.7.5+release.autotools to adapt to many kinds of systems.
+\`configure' configures libopenmpt 0.7.6+release.autotools to adapt to many kinds of systems.
Usage: $0 [OPTION]... [VAR=VALUE]...
@@ -1581,7 +1581,7 @@
if test -n "$ac_init_help"; then
case $ac_init_help in
- short | recursive ) echo "Configuration of libopenmpt 0.7.5+release.autotools:";;
+ short | recursive ) echo "Configuration of libopenmpt 0.7.6+release.autotools:";;
esac
cat <<\_ACEOF
@@ -1768,7 +1768,7 @@
test -n "$ac_init_help" && exit $ac_status
if $ac_init_version; then
cat <<\_ACEOF
-libopenmpt configure 0.7.5+release.autotools
+libopenmpt configure 0.7.6+release.autotools
generated by GNU Autoconf 2.71
Copyright (C) 2021 Free Software Foundation, Inc.
@@ -2148,7 +2148,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.7.5+release.autotools, which was
+It was created by libopenmpt $as_me 0.7.6+release.autotools, which was
generated by GNU Autoconf 2.71. Invocation command line was
$ $0$ac_configure_args_raw
@@ -3644,7 +3644,7 @@
# Define the identity of the package.
PACKAGE='libopenmpt'
- VERSION='0.7.5+release.autotools'
+ VERSION='0.7.6+release.autotools'
printf "%s\n" "#define PACKAGE \"$PACKAGE\"" >>confdefs.h
@@ -21837,13 +21837,13 @@
-printf "%s\n" "#define MPT_SVNURL \"https://source.openmpt.org/svn/openmpt/tags/libopenmpt-0.7.5\"" >>confdefs.h
+printf "%s\n" "#define MPT_SVNURL \"https://source.openmpt.org/svn/openmpt/tags/libopenmpt-0.7.6\"" >>confdefs.h
-printf "%s\n" "#define MPT_SVNVERSION \"20388\"" >>confdefs.h
+printf "%s\n" "#define MPT_SVNVERSION \"20445\"" >>confdefs.h
-printf "%s\n" "#define MPT_SVNDATE \"2024-03-17T07:44:31.885993Z\"" >>confdefs.h
+printf "%s\n" "#define MPT_SVNDATE \"2024-03-24T12:17:57.924136Z\"" >>confdefs.h
printf "%s\n" "#define MPT_PACKAGE true" >>confdefs.h
@@ -25798,7 +25798,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.7.5+release.autotools, which was
+This file was extended by libopenmpt $as_me 0.7.6+release.autotools, which was
generated by GNU Autoconf 2.71. Invocation command line was
CONFIG_FILES = $CONFIG_FILES
@@ -25858,7 +25858,7 @@
cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
ac_cs_config='$ac_cs_config_escaped'
ac_cs_version="\\
-libopenmpt config.status 0.7.5+release.autotools
+libopenmpt config.status 0.7.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.7.5+release.autotools/configure.ac new/libopenmpt-0.7.6+release.autotools/configure.ac
--- old/libopenmpt-0.7.5+release.autotools/configure.ac 2024-03-17 09:49:19.000000000 +0100
+++ new/libopenmpt-0.7.6+release.autotools/configure.ac 2024-03-24 14:26:21.000000000 +0100
@@ -1,4 +1,4 @@
-AC_INIT([libopenmpt], [0.7.5+release.autotools], [https://bugs.openmpt.org/], [libopenmpt], [https://lib.openmpt.org/])
+AC_INIT([libopenmpt], [0.7.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])
@@ -62,9 +62,9 @@
AC_SUBST([LIBOPENMPT_LTVER_REVISION])
AC_SUBST([LIBOPENMPT_LTVER_AGE])
-AC_DEFINE([MPT_SVNURL], ["https://source.openmpt.org/svn/openmpt/tags/libopenmpt-0.7.5"], [svn version])
-AC_DEFINE([MPT_SVNVERSION], ["20388"], [svn version])
-AC_DEFINE([MPT_SVNDATE], ["2024-03-17T07:44:31.885993Z"], [svn date])
+AC_DEFINE([MPT_SVNURL], ["https://source.openmpt.org/svn/openmpt/tags/libopenmpt-0.7.6"], [svn version])
+AC_DEFINE([MPT_SVNVERSION], ["20445"], [svn version])
+AC_DEFINE([MPT_SVNDATE], ["2024-03-24T12:17:57.924136Z"], [svn date])
AC_DEFINE([MPT_PACKAGE], [true], [is package])
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libopenmpt-0.7.5+release.autotools/doc/libopenmpt/changelog.md new/libopenmpt-0.7.6+release.autotools/doc/libopenmpt/changelog.md
--- old/libopenmpt-0.7.5+release.autotools/doc/libopenmpt/changelog.md 2024-03-17 08:44:29.000000000 +0100
+++ new/libopenmpt-0.7.6+release.autotools/doc/libopenmpt/changelog.md 2024-03-24 13:17:56.000000000 +0100
@@ -5,6 +5,20 @@
For fully detailed change log, please see the source repository directly. This
is just a high-level summary.
+### libopenmpt 0.7.6 (2024-03-24)
+
+ * [**Sec**] Potential heap out-of-bounds read or write past sample end with
+ malformed sustain loops in SymMOD files (r20420).
+
+ * MED: Transposed samples were playing too low in some files (e.g.
+ mix94.mmd1).
+ * OKT: Some files with garbage at the end were rejected (e.g.
+ katharsis - piano lesson.okta).
+ * Compressor DMO: It was possible that the plugin would not behave as intended
+ at mix rates above 500 kHz.
+ * Avoid re-allocating the loop state map contents on every playthrough of the
+ module.
+
### libopenmpt 0.7.5 (2024-03-17)
* [**Sec**] Null-pointer write (32bit platforms) or excessive memory
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libopenmpt-0.7.5+release.autotools/libopenmpt/libopenmpt_version.h new/libopenmpt-0.7.6+release.autotools/libopenmpt/libopenmpt_version.h
--- old/libopenmpt-0.7.5+release.autotools/libopenmpt/libopenmpt_version.h 2024-03-17 08:44:29.000000000 +0100
+++ new/libopenmpt-0.7.6+release.autotools/libopenmpt/libopenmpt_version.h 2024-03-24 13:17:56.000000000 +0100
@@ -21,7 +21,7 @@
/*! \brief libopenmpt minor version number */
#define OPENMPT_API_VERSION_MINOR 7
/*! \brief libopenmpt patch version number */
-#define OPENMPT_API_VERSION_PATCH 5
+#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.7.5+release.autotools/libopenmpt/libopenmpt_version.mk new/libopenmpt-0.7.6+release.autotools/libopenmpt/libopenmpt_version.mk
--- old/libopenmpt-0.7.5+release.autotools/libopenmpt/libopenmpt_version.mk 2024-03-17 08:44:29.000000000 +0100
+++ new/libopenmpt-0.7.6+release.autotools/libopenmpt/libopenmpt_version.mk 2024-03-24 13:17:56.000000000 +0100
@@ -1,8 +1,8 @@
LIBOPENMPT_VERSION_MAJOR=0
LIBOPENMPT_VERSION_MINOR=7
-LIBOPENMPT_VERSION_PATCH=5
+LIBOPENMPT_VERSION_PATCH=6
LIBOPENMPT_VERSION_PREREL=
LIBOPENMPT_LTVER_CURRENT=4
-LIBOPENMPT_LTVER_REVISION=5
+LIBOPENMPT_LTVER_REVISION=6
LIBOPENMPT_LTVER_AGE=4
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libopenmpt-0.7.5+release.autotools/man/openmpt123.1 new/libopenmpt-0.7.6+release.autotools/man/openmpt123.1
--- old/libopenmpt-0.7.5+release.autotools/man/openmpt123.1 2024-03-17 09:49:16.000000000 +0100
+++ new/libopenmpt-0.7.6+release.autotools/man/openmpt123.1 2024-03-24 14:26:20.000000000 +0100
@@ -1,12 +1,12 @@
.\" DO NOT MODIFY THIS FILE! It was generated by help2man 1.49.3.
-.TH OPENMPT123 "1" "March 2024" "openmpt123 v0.7.5" "User Commands"
+.TH OPENMPT123 "1" "March 2024" "openmpt123 v0.7.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.7.5, libopenmpt 0.7.5+r20388 (OpenMPT 1.31.05.02\-r20388 https://source.openmpt.org/svn/openmpt/tags/libopenmpt\-0.7.5@20388 (2024\-03\-17T07:44:31.885993Z) clean)
+openmpt123 v0.7.6, libopenmpt 0.7.6+r20445 (OpenMPT 1.31.06.00 https://source.openmpt.org/svn/openmpt/tags/libopenmpt\-0.7.6@20445 (2024\-03\-24T12:17:57.924136Z) clean)
Copyright \(co 2013\-2024 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.7.5+release.autotools/soundlib/Load_med.cpp new/libopenmpt-0.7.6+release.autotools/soundlib/Load_med.cpp
--- old/libopenmpt-0.7.5+release.autotools/soundlib/Load_med.cpp 2023-06-15 21:29:20.000000000 +0200
+++ new/libopenmpt-0.7.6+release.autotools/soundlib/Load_med.cpp 2024-03-17 13:34:44.000000000 +0100
@@ -818,6 +818,9 @@
instr.AssignSample(0);
}
+ MMD0Sample sampleHeader;
+ sampleHeaderChunk.ReadStruct(sampleHeader);
+
uint8 numSamples = 1;
static constexpr uint8 SamplesPerType[] = {1, 5, 3, 2, 4, 6, 7};
if(!isSynth && maskedType < std::size(SamplesPerType))
@@ -850,10 +853,10 @@
// TODO: Move octaves so that they align better (C-4 = lowest, we don't have access to the highest four octaves)
for(int octave = 4; octave < 10; octave++)
{
- for(int note = 0; note < 12; note++)
+ for(int note = 0, i = 12 * octave; note < 12; note++, i++)
{
- instr.Keyboard[12 * octave + note] = smp + OctSampleMap[numSamples - 2][octave - 4];
- instr.NoteMap[12 * octave + note] += OctTransposeMap[numSamples - 2][octave - 4];
+ instr.Keyboard[i] = smp + OctSampleMap[numSamples - 2][octave - 4];
+ instr.NoteMap[i] = static_cast<uint8>(instr.NoteMap[i] + OctTransposeMap[numSamples - 2][octave - 4]);
}
}
} else if(maskedType == MMDInstrHeader::EXTSAMPLE)
@@ -862,18 +865,14 @@
instr.Transpose(-24);
} else if(!isSynth && hardwareMixSamples)
{
- for(int octave = 7; octave < 10; octave++)
+ for(auto ¬e : instr.NoteMap)
{
- for(int note = 0; note < 12; note++)
- {
- instr.NoteMap[12 * octave + note] -= static_cast<uint8>((octave - 6) * 12);
- }
+ int realNote = note + sampleHeader.sampleTranspose;
+ if(realNote >= NOTE_MIDDLEC + 24)
+ note -= static_cast<uint8>(mpt::align_down(realNote - NOTE_MIDDLEC - 12, 12));
}
}
- MMD0Sample sampleHeader;
- sampleHeaderChunk.ReadStruct(sampleHeader);
-
// midiChannel = 0xFF == midi instrument but with invalid channel, midiChannel = 0x00 == sample-based instrument?
if(sampleHeader.midiChannel > 0 && sampleHeader.midiChannel <= 16)
{
@@ -1153,12 +1152,12 @@
if(!order.empty())
order.push_back(order.GetIgnoreIndex());
+ const size_t orderStart = order.size();
size_t readOrders = playSeq.length;
if(!file.CanRead(readOrders))
LimitMax(readOrders, file.BytesLeft());
LimitMax(readOrders, ORDERINDEX_MAX);
- size_t orderStart = order.size();
order.reserve(orderStart + readOrders);
for(size_t ord = 0; ord < readOrders; ord++)
{
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libopenmpt-0.7.5+release.autotools/soundlib/Load_okt.cpp new/libopenmpt-0.7.6+release.autotools/soundlib/Load_okt.cpp
--- old/libopenmpt-0.7.5+release.autotools/soundlib/Load_okt.cpp 2024-01-10 21:17:58.000000000 +0100
+++ new/libopenmpt-0.7.6+release.autotools/soundlib/Load_okt.cpp 2024-03-17 17:33:20.000000000 +0100
@@ -29,8 +29,8 @@
idSBOD = MagicBE("SBOD"),
};
- uint32be signature; // IFF chunk name
- uint32be chunksize; // chunk size without header
+ uint32be signature; // IFF chunk name
+ uint32be chunksize; // chunk size without header
};
MPT_BINARY_STRUCT(OktIffChunk, 8)
@@ -328,19 +328,6 @@
{
return ProbeFailure;
}
- OktIffChunk iffHead;
- if(!file.ReadStruct(iffHead))
- {
- return ProbeWantMoreData;
- }
- if(iffHead.chunksize == 0)
- {
- return ProbeFailure;
- }
- if((iffHead.signature & 0x80808080u) != 0) // ASCII?
- {
- return ProbeFailure;
- }
MPT_UNREFERENCED_PARAMETER(pfilesize);
return ProbeSuccess;
}
@@ -354,7 +341,6 @@
return false;
}
- // prepare some arrays to store offsets etc.
std::vector<FileReader> patternChunks;
std::vector<FileReader> sampleChunks;
std::array pairedChn{{}};
@@ -371,15 +357,11 @@
{
OktIffChunk iffHead;
if(!file.ReadStruct(iffHead))
- {
break;
- }
FileReader chunk = file.ReadChunk(iffHead.chunksize);
if(!chunk.IsValid())
- {
- break;
- }
+ continue;
switch(iffHead.signature)
{
@@ -457,12 +439,6 @@
sampleChunks.push_back(chunk);
}
break;
-
- default:
- // Non-ASCII chunk ID?
- if(iffHead.signature & 0x80808080)
- return false;
- break;
}
}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libopenmpt-0.7.5+release.autotools/soundlib/Load_symmod.cpp new/libopenmpt-0.7.6+release.autotools/soundlib/Load_symmod.cpp
--- old/libopenmpt-0.7.5+release.autotools/soundlib/Load_symmod.cpp 2023-03-19 13:01:38.000000000 +0100
+++ new/libopenmpt-0.7.6+release.autotools/soundlib/Load_symmod.cpp 2024-03-21 21:52:11.000000000 +0100
@@ -665,7 +665,7 @@
loopLen = (loopLen << 16) + loopLenFine;
const double loopScale = static_cast<double>(mptSmp.nLength) / (100 << 16);
- loopStart = mpt::saturate_cast<SmpLength>(loopStart * loopScale);
+ loopStart = std::min(mptSmp.nLength, mpt::saturate_cast<SmpLength>(loopStart * loopScale));
loopLen = std::min(mptSmp.nLength - loopStart, mpt::saturate_cast<SmpLength>(loopLen * loopScale));
} else if(mptSmp.HasSampleData())
{
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libopenmpt-0.7.5+release.autotools/soundlib/RowVisitor.cpp new/libopenmpt-0.7.6+release.autotools/soundlib/RowVisitor.cpp
--- old/libopenmpt-0.7.5+release.autotools/soundlib/RowVisitor.cpp 2023-03-04 00:58:04.000000000 +0100
+++ new/libopenmpt-0.7.6+release.autotools/soundlib/RowVisitor.cpp 2024-03-23 15:09:39.000000000 +0100
@@ -23,7 +23,7 @@
RowVisitor::LoopState::LoopState(const ChannelStates &chnState, const bool ignoreRow)
{
- // Rather than storing the exact loop count vector, we compute a FNV-1a 64-bit hash of it.
+ // Rather than storing the exact loop count vector, we compute an FNV-1a 64-bit hash of it.
// This means we can store the loop state in a small and fixed amount of memory.
// In theory there is the possibility of hash collisions for different loop states, but in practice,
// the relevant inputs for the hashing algorithm are extremely unlikely to produce collisions.
@@ -84,10 +84,15 @@
{
auto &order = Order();
const ORDERINDEX endOrder = order.GetLengthTailTrimmed();
+ bool reserveLoopStates = true;
m_visitedRows.resize(endOrder);
if(reset)
{
- m_visitedLoopStates.clear();
+ reserveLoopStates = m_visitedLoopStates.empty();
+ for(auto &loopState : m_visitedLoopStates)
+ {
+ loopState.second.clear();
+ }
m_rowsSpentInLoops = 0;
}
@@ -104,7 +109,7 @@
else
visitedRows.resize(numRows, false);
- if(!order.IsValidPat(ord))
+ if(!reserveLoopStates || !order.IsValidPat(ord))
continue;
const ROWINDEX startRow = std::min(static_cast<ROWINDEX>(reset ? 0 : visitedRows.size()), numRows);
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libopenmpt-0.7.5+release.autotools/soundlib/plugins/dmo/Compressor.cpp new/libopenmpt-0.7.6+release.autotools/soundlib/plugins/dmo/Compressor.cpp
--- old/libopenmpt-0.7.5+release.autotools/soundlib/plugins/dmo/Compressor.cpp 2023-01-21 09:08:51.000000000 +0100
+++ new/libopenmpt-0.7.6+release.autotools/soundlib/plugins/dmo/Compressor.cpp 2024-03-17 13:34:44.000000000 +0100
@@ -88,10 +88,10 @@
}
compGainPow >>= (31 - compGainInt);
- int32 readOffset = m_predelay + m_bufPos * 4096 + m_bufSize - 1;
+ int32 readOffset = m_predelay + m_bufSize - 1;
readOffset /= 4096;
- readOffset %= m_bufSize;
-
+ readOffset = (readOffset + m_bufPos) % m_bufSize;
+
float outGain = (static_cast<float>(compGainPow) * (1.0f / 2147483648.0f)) * m_gain;
*(out[0])++ = m_buffer[readOffset * 2] * outGain;
*(out[1])++ = m_buffer[readOffset * 2 + 1] * outGain;