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 <m...@0x0.st>
+
+- 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 &note : 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<int8, 8> 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;

Reply via email to