Script 'mail_helper' called by obssrc
Hello community,

here is the log from the commit of package mt32emu for openSUSE:Factory checked 
in at 2026-05-25 21:56:19
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/mt32emu (Old)
 and      /work/SRC/openSUSE:Factory/.mt32emu.new.2084 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "mt32emu"

Mon May 25 21:56:19 2026 rev:16 rq:1355047 version:2.8.2

Changes:
--------
--- /work/SRC/openSUSE:Factory/mt32emu/mt32emu.changes  2026-05-23 
23:28:37.355762174 +0200
+++ /work/SRC/openSUSE:Factory/.mt32emu.new.2084/mt32emu.changes        
2026-05-25 21:59:33.883780006 +0200
@@ -1,0 +2,7 @@
+Mon May 25 09:12:38 UTC 2026 - Martin Hauke <[email protected]>
+
+- Update to 2.8.2
+  * Prevented Rhythm Timbre bank from overwriting by unofficial
+    SysEx messages addressing memory range 0x090000-0x097FFF.
+
+-------------------------------------------------------------------

Old:
----
  munt-libmt32emu_2_8_1.tar.gz

New:
----
  munt-libmt32emu_2_8_2.tar.gz

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Other differences:
------------------
++++++ mt32emu.spec ++++++
--- /var/tmp/diff_new_pack.55vTVu/_old  2026-05-25 21:59:34.643811281 +0200
+++ /var/tmp/diff_new_pack.55vTVu/_new  2026-05-25 21:59:34.643811281 +0200
@@ -17,10 +17,10 @@
 
 
 %define s_name  munt-lib%{name}_%{s_ver}
-%define s_ver   2_8_1
+%define s_ver   2_8_2
 %define sover   2
 Name:           mt32emu
-Version:        2.8.1
+Version:        2.8.2
 Release:        0
 Summary:        An emulator of the Roland MT-32, CM-32L and LAPC-I synthesiser 
modules
 License:        GPL-3.0-or-later AND LGPL-2.1-or-later

++++++ munt-libmt32emu_2_8_1.tar.gz -> munt-libmt32emu_2_8_2.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/munt-libmt32emu_2_8_1/.github/workflows/build-release-packages.yml 
new/munt-libmt32emu_2_8_2/.github/workflows/build-release-packages.yml
--- old/munt-libmt32emu_2_8_1/.github/workflows/build-release-packages.yml      
1970-01-01 01:00:00.000000000 +0100
+++ new/munt-libmt32emu_2_8_2/.github/workflows/build-release-packages.yml      
2026-05-24 22:11:28.000000000 +0200
@@ -0,0 +1,116 @@
+name: Build release packages
+
+on:
+  workflow_dispatch
+
+jobs:
+  build-ubuntu-packages:
+    runs-on: ubuntu-latest
+
+    defaults:
+      run:
+        shell: bash
+        working-directory: ${{ github.workspace }}
+
+    steps:
+    - uses: actions/checkout@v4
+
+    - name: Install dependencies for libmt32emu
+      run: |
+        sudo apt-get update
+        sudo apt-get install doctest-dev
+
+    - name: Configure libmt32emu
+      run: >
+        cmake -S mt32emu -B build
+        -G Ninja
+        -D CMAKE_BUILD_TYPE=Release
+        -D libmt32emu_PACKAGE_TYPE=Runtime
+        -D libmt32emu_WITH_VERSION_TAGGING=ON
+        -D libmt32emu_WITH_SYMBOL_VERSIONING=ON
+
+    - name: Build libmt32emu
+      run: cmake --build build
+
+    - name: Test libmt32emu
+      working-directory: ${{ github.workspace }}/build
+      run: ctest -V
+
+    - name: Package libmt32emu
+      working-directory: ${{ github.workspace }}/build
+      run: cpack -G DEB
+
+    - uses: actions/upload-artifact@v7
+      name: Upload libmt32emu
+      with:
+        path: ${{ github.workspace }}/build/libmt32emu-*.deb
+        archive: false
+
+    - name: Configure libmt32emu-dev
+      run: cmake -D libmt32emu_PACKAGE_TYPE=Devel build
+
+    - name: Package libmt32emu-dev
+      working-directory: ${{ github.workspace }}/build
+      run: cpack -G DEB
+
+    - uses: actions/upload-artifact@v7
+      name: Upload libmt32emu-dev
+      with:
+        path: ${{ github.workspace }}/build/libmt32emu-dev-*.deb
+        archive: false
+
+    - name: Install dependencies for mt32emu-smf2wav
+      working-directory: ${{ github.workspace }}/build
+      run: |
+        sudo dpkg -i libmt32emu-*.deb
+        sudo dpkg -i libmt32emu-dev-*.deb
+        sudo apt-get install libglib2.0-dev
+
+    - name: Clean build directory
+      run: rm -rf build
+
+    - name: Configure mt32emu-smf2wav
+      run: >
+        cmake -S mt32emu_smf2wav -B build
+        -G Ninja
+        -D CMAKE_BUILD_TYPE=Release
+
+    - name: Build mt32emu-smf2wav
+      run: cmake --build build
+
+    - name: Package mt32emu-smf2wav
+      working-directory: ${{ github.workspace }}/build
+      run: cpack -G DEB
+
+    - uses: actions/upload-artifact@v7
+      name: Upload mt32emu-smf2wav
+      with:
+        path: ${{ github.workspace }}/build/mt32emu-smf2wav-*.deb
+        archive: false
+
+    - name: Clean build directory
+      run: rm -rf build
+
+    - name: Install dependencies for mt32emu-qt
+      run: sudo apt-get install libpulse-dev portaudio19-dev 
libjack-jackd2-dev qt6-multimedia-dev
+
+    - name: Configure mt32emu-qt
+      run: >
+        cmake -S mt32emu_qt -B build
+        -G Ninja
+        -D CMAKE_BUILD_TYPE=Release
+        -D mt32emu-qt_USE_JACK_DYNAMIC_LOADING=ON
+        -D mt32emu-qt_USE_PULSEAUDIO_DYNAMIC_LOADING=OFF
+
+    - name: Build mt32emu-qt
+      run: cmake --build build
+
+    - name: Package mt32emu-qt
+      working-directory: ${{ github.workspace }}/build
+      run: cpack -G DEB
+
+    - uses: actions/upload-artifact@v7
+      name: Upload mt32emu-qt
+      with:
+        path: ${{ github.workspace }}/build/mt32emu-qt-*.deb
+        archive: false
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/munt-libmt32emu_2_8_1/.github/workflows/build-snapshots.yml 
new/munt-libmt32emu_2_8_2/.github/workflows/build-snapshots.yml
--- old/munt-libmt32emu_2_8_1/.github/workflows/build-snapshots.yml     
1970-01-01 01:00:00.000000000 +0100
+++ new/munt-libmt32emu_2_8_2/.github/workflows/build-snapshots.yml     
2026-05-24 22:11:28.000000000 +0200
@@ -0,0 +1,143 @@
+name: Build snapshots
+
+on:
+  push:
+    branches: [ "master" ]
+  pull_request:
+    branches: [ "master" ]
+
+jobs:
+  build-ubuntu-snapshot:
+    runs-on: ubuntu-latest
+
+    defaults:
+      run:
+        shell: bash
+        working-directory: ${{ github.workspace }}
+
+    steps:
+    - uses: actions/checkout@v4
+
+    - name: Install dependencies
+      run: |
+        sudo apt-get update
+        sudo apt-get install doctest-dev libpulse-dev portaudio19-dev 
libjack-jackd2-dev qt6-multimedia-dev
+
+    - name: Configure
+      run: >
+        cmake -S . -B build
+        -G Ninja
+        -D CMAKE_BUILD_TYPE=Release
+        -D BUILD_SNAPSHOTS=ON
+        -D libmt32emu_PACKAGE_TYPE=Runtime
+        -D mt32emu-qt_USE_JACK_DYNAMIC_LOADING=ON
+        -D mt32emu-qt_USE_PULSEAUDIO_DYNAMIC_LOADING=OFF
+
+    - name: Build
+      run: cmake --build build
+
+    - name: Test
+      working-directory: ${{ github.workspace }}/build
+      run: ctest -V
+
+    - name: Package munt monolith
+      working-directory: ${{ github.workspace }}/build
+      run: cpack -G DEB
+
+    - uses: actions/upload-artifact@v7
+      name: Upload munt
+      with:
+        path: ${{ github.workspace }}/build/munt-*.deb
+        archive: false
+
+  build-macos-snapshot:
+    runs-on: macos-latest
+
+    defaults:
+      run:
+        shell: bash
+        working-directory: ${{ github.workspace }}
+
+    steps:
+    - uses: actions/checkout@v4
+
+    - name: Install dependencies
+      run: |
+        brew update
+        brew install doctest portaudio jack qtmultimedia
+
+    - name: Configure
+      run: >
+        cmake -S . -B build
+        -G Ninja
+        -D CMAKE_BUILD_TYPE=Release
+        -D BUILD_SNAPSHOTS=ON
+        -D libmt32emu_PACKAGE_TYPE=Runtime
+
+    - name: Build
+      run: cmake --build build
+
+    - name: Test
+      working-directory: ${{ github.workspace }}/build
+      run: ctest -V
+
+    - name: Package munt monolith
+      working-directory: ${{ github.workspace }}/build
+      run: cpack -G TXZ
+
+    - uses: actions/upload-artifact@v7
+      name: Upload munt
+      with:
+        path: ${{ github.workspace }}/build/munt-*.tar.xz
+        archive: false
+
+  build-windows-snapshot:
+    runs-on: windows-latest
+
+    defaults:
+      run:
+        shell: bash
+        working-directory: ${{ github.workspace }}
+
+    env:
+      MINGW64_PATH: '/c/msys64/mingw64/bin:/c/msys64/usr/bin'
+
+    steps:
+    - uses: actions/checkout@v4
+
+    - name: Install dependencies
+      run: >
+        PATH=$MINGW64_PATH:$PATH
+        pacman -Sy --noconfirm
+        mingw-w64-x86_64-gcc
+        mingw-w64-x86_64-doctest
+        mingw-w64-x86_64-glib2
+        mingw-w64-x86_64-portaudio
+        mingw-w64-x86_64-jack2
+        mingw-w64-x86_64-qt6-multimedia
+
+    - name: Configure
+      run: >
+        PATH=$MINGW64_PATH:$PATH
+        cmake -S . -B build
+        -G Ninja
+        -D CMAKE_BUILD_TYPE=Release
+        -D BUILD_SNAPSHOTS=ON
+        -D libmt32emu_PACKAGE_TYPE=Runtime
+
+    - name: Build
+      run: PATH=$MINGW64_PATH:$PATH cmake --build build
+
+    - name: Test
+      working-directory: ${{ github.workspace }}/build
+      run: PATH=$MINGW64_PATH:$PATH ctest -V
+
+    - name: Package munt monolith
+      working-directory: ${{ github.workspace }}/build
+      run: cpack -G ZIP
+
+    - uses: actions/upload-artifact@v7
+      name: Upload munt
+      with:
+        path: ${{ github.workspace }}/build/munt-*.zip
+        archive: false
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/munt-libmt32emu_2_8_1/cmake/project_data.cmake 
new/munt-libmt32emu_2_8_2/cmake/project_data.cmake
--- old/munt-libmt32emu_2_8_1/cmake/project_data.cmake  2026-05-23 
10:27:12.000000000 +0200
+++ new/munt-libmt32emu_2_8_2/cmake/project_data.cmake  2026-05-24 
22:11:28.000000000 +0200
@@ -4,5 +4,5 @@
 
 set(munt_VERSION_MAJOR 2)
 set(munt_VERSION_MINOR 8)
-set(munt_VERSION_PATCH 0)
+set(munt_VERSION_PATCH 1)
 set(munt_VERSION 
"${munt_VERSION_MAJOR}.${munt_VERSION_MINOR}.${munt_VERSION_PATCH}")
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/munt-libmt32emu_2_8_1/mt32emu/NEWS.txt 
new/munt-libmt32emu_2_8_2/mt32emu/NEWS.txt
--- old/munt-libmt32emu_2_8_1/mt32emu/NEWS.txt  2026-05-23 10:27:12.000000000 
+0200
+++ new/munt-libmt32emu_2_8_2/mt32emu/NEWS.txt  2026-05-24 22:11:28.000000000 
+0200
@@ -1,3 +1,10 @@
+2026-05-24:
+
+       2.8.2 released.
+
+       * Prevented Rhythm Timbre bank from overwriting by unofficial SysEx 
messages addressing
+         memory range 0x090000-0x097FFF. (#146)
+
 2026-05-23:
 
        2.8.1 released.
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/munt-libmt32emu_2_8_1/mt32emu/cmake/project_data.cmake 
new/munt-libmt32emu_2_8_2/mt32emu/cmake/project_data.cmake
--- old/munt-libmt32emu_2_8_1/mt32emu/cmake/project_data.cmake  2026-05-23 
10:27:12.000000000 +0200
+++ new/munt-libmt32emu_2_8_2/mt32emu/cmake/project_data.cmake  2026-05-24 
22:11:28.000000000 +0200
@@ -4,5 +4,5 @@
 
 set(libmt32emu_VERSION_MAJOR 2)
 set(libmt32emu_VERSION_MINOR 8)
-set(libmt32emu_VERSION_PATCH 1)
+set(libmt32emu_VERSION_PATCH 2)
 set(libmt32emu_VERSION 
"${libmt32emu_VERSION_MAJOR}.${libmt32emu_VERSION_MINOR}.${libmt32emu_VERSION_PATCH}")
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/munt-libmt32emu_2_8_1/mt32emu/src/MemoryRegion.h 
new/munt-libmt32emu_2_8_2/mt32emu/src/MemoryRegion.h
--- old/munt-libmt32emu_2_8_1/mt32emu/src/MemoryRegion.h        2026-05-23 
10:27:12.000000000 +0200
+++ new/munt-libmt32emu_2_8_2/mt32emu/src/MemoryRegion.h        2026-05-24 
22:11:28.000000000 +0200
@@ -1,5 +1,5 @@
 /* Copyright (C) 2003, 2004, 2005, 2006, 2008, 2009 Dean Beeler, Jerome Fisher
- * Copyright (C) 2011-2025 Dean Beeler, Jerome Fisher, Sergey V. Mikayev
+ * Copyright (C) 2011-2026 Dean Beeler, Jerome Fisher, Sergey V. Mikayev
  *
  *  This program is free software: you can redistribute it and/or modify
  *  it under the terms of the GNU Lesser General Public License as published by
@@ -108,13 +108,9 @@
 public:
        PatchesMemoryRegion(Bit8u *useRealMemory, Bit8u *useMaxTable) : 
MemoryRegion(useRealMemory, useMaxTable, MR_Patches, MT32EMU_MEMADDR(0x050000), 
sizeof(PatchParam), 128) {}
 };
-// Note: this region has quite a special memory layout and doesn't map 
directly to SysEx-addressable memory.
-// Aside from the actual Timbre Memory bank, we also cache the standard 
timbres extracted from the Control ROM herein.
-// Therefore, one must always apply offset +128 when accessing the entries of 
the Timbre Memory bank.
-// This also means that e.g. getClampedLen doesn't work as expected, so better 
to clean up this mess.
 class TimbresMemoryRegion : public MemoryRegion {
 public:
-       TimbresMemoryRegion(Bit8u *useRealMemory, Bit8u *useMaxTable) : 
MemoryRegion(useRealMemory, useMaxTable, MR_Timbres, MT32EMU_MEMADDR(0x080000), 
sizeof(MemParams::PaddedTimbre), 64 + 64 + 64 + 64) {}
+       TimbresMemoryRegion(Bit8u *useRealMemory, Bit8u *useMaxTable) : 
MemoryRegion(useRealMemory, useMaxTable, MR_Timbres, MT32EMU_MEMADDR(0x080000), 
sizeof(MemParams::PaddedTimbre), 64) {}
 };
 class SystemMemoryRegion : public MemoryRegion {
 public:
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/munt-libmt32emu_2_8_1/mt32emu/src/Synth.cpp 
new/munt-libmt32emu_2_8_2/mt32emu/src/Synth.cpp
--- old/munt-libmt32emu_2_8_1/mt32emu/src/Synth.cpp     2026-05-23 
10:27:12.000000000 +0200
+++ new/munt-libmt32emu_2_8_2/mt32emu/src/Synth.cpp     2026-05-24 
22:11:28.000000000 +0200
@@ -695,14 +695,15 @@
        return false;
 }
 
-bool Synth::initCompressedTimbre(Bit16u timbreNum, const Bit8u *src, Bit32u 
srcLen) {
+bool Synth::initCompressedTimbre(TimbresMemoryRegion &tempRegion, Bit16u 
absTimbreNum, const Bit8u *src, Bit32u srcLen) {
        // "Compressed" here means that muted partials aren't present in ROM 
(except in the case of partial 0 being muted).
        // Instead the data from the previous unmuted partial is used.
        if (srcLen < sizeof(TimbreParam::CommonParam)) {
                return false;
        }
-       TimbreParam *timbre = &mt32ram.timbres[timbreNum].timbre;
-       timbresMemoryRegion->write(timbreNum, 0, src, 
sizeof(TimbreParam::CommonParam), true);
+       TimbreParam *timbre = &mt32ram.timbres[absTimbreNum].timbre;
+       Bit32u timbreNum = absTimbreNum & 0x3F;
+       tempRegion.write(timbreNum, 0, src, sizeof(TimbreParam::CommonParam), 
true);
        unsigned int srcPos = sizeof(TimbreParam::CommonParam);
        unsigned int memPos = sizeof(TimbreParam::CommonParam);
        for (int t = 0; t < 4; t++) {
@@ -712,7 +713,7 @@
                } else if (srcPos + sizeof(TimbreParam::PartialParam) >= 
srcLen) {
                        return false;
                }
-               timbresMemoryRegion->write(timbreNum, memPos, src + srcPos, 
sizeof(TimbreParam::PartialParam));
+               tempRegion.write(timbreNum, memPos, src + srcPos, 
sizeof(TimbreParam::PartialParam));
                srcPos += sizeof(TimbreParam::PartialParam);
                memPos += sizeof(TimbreParam::PartialParam);
        }
@@ -721,22 +722,26 @@
 
 bool Synth::initTimbres(Bit16u mapAddress, Bit16u offset, Bit16u count, Bit16u 
startTimbre, bool compressed) {
        const Bit8u *timbreMap = &controlROMData[mapAddress];
+       // We abuse TimbresMemoryRegion with the sole purpose of clamping the 
timbre parameters by the max table.
+       TimbresMemoryRegion tempRegion(reinterpret_cast<Bit8u 
*>(mt32ram.timbres + startTimbre), paddedTimbreMaxTable);
+       Bit16u timbreNum = 0;
        for (Bit16u i = 0; i < count * 2; i += 2) {
+               Bit16u absTimbreNum = startTimbre + timbreNum;
                Bit16u address = (timbreMap[i + 1] << 8) | timbreMap[i];
                if (!compressed && (address + offset + sizeof(TimbreParam) > 
CONTROL_ROM_SIZE)) {
-                       printDebug("Control ROM error: Timbre map entry 0x%04x 
for timbre %d points to invalid timbre address 0x%04x", i, startTimbre, 
address);
+                       printDebug("Control ROM error: Timbre map entry 0x%04x 
for timbre %d points to invalid timbre address 0x%04x", i, absTimbreNum, 
address);
                        return false;
                }
                address += offset;
                if (compressed) {
-                       if (!initCompressedTimbre(startTimbre, 
&controlROMData[address], CONTROL_ROM_SIZE - address)) {
-                               printDebug("Control ROM error: Timbre map entry 
0x%04x for timbre %d points to invalid timbre at 0x%04x", i, startTimbre, 
address);
+                       if (!initCompressedTimbre(tempRegion, absTimbreNum, 
&controlROMData[address], CONTROL_ROM_SIZE - address)) {
+                               printDebug("Control ROM error: Timbre map entry 
0x%04x for timbre %d points to invalid timbre at 0x%04x", i, absTimbreNum, 
address);
                                return false;
                        }
                } else {
-                       timbresMemoryRegion->write(startTimbre, 0, 
&controlROMData[address], sizeof(TimbreParam), true);
+                       tempRegion.write(timbreNum, 0, 
&controlROMData[address], sizeof(TimbreParam), true);
                }
-               startTimbre++;
+               timbreNum++;
        }
        return true;
 }
@@ -1650,7 +1655,7 @@
        rhythmTempMemoryRegion = new 
RhythmTempMemoryRegion(reinterpret_cast<Bit8u *>(&mt32ram.rhythmTemp[0]), 
&controlROMData[controlROMMap->rhythmMaxTable]);
        timbreTempMemoryRegion = new 
TimbreTempMemoryRegion(reinterpret_cast<Bit8u *>(&mt32ram.timbreTemp[0]), 
paddedTimbreMaxTable);
        patchesMemoryRegion = new PatchesMemoryRegion(reinterpret_cast<Bit8u 
*>(&mt32ram.patches[0]), &controlROMData[controlROMMap->patchMaxTable]);
-       timbresMemoryRegion = new TimbresMemoryRegion(reinterpret_cast<Bit8u 
*>(&mt32ram.timbres[0]), paddedTimbreMaxTable);
+       timbresMemoryRegion = new TimbresMemoryRegion(reinterpret_cast<Bit8u 
*>(&mt32ram.timbres[/* Bank M */ 128]), paddedTimbreMaxTable);
        systemMemoryRegion = new SystemMemoryRegion(reinterpret_cast<Bit8u 
*>(&mt32ram.system), &controlROMData[controlROMMap->systemMaxTable]);
        displayMemoryRegion = new DisplayMemoryRegion();
        resetMemoryRegion = new ResetMemoryRegion();
@@ -1707,7 +1712,6 @@
        unsigned int m;
 
        if (region->isReadable()) {
-               if (MR_Timbres == region->type) first += 128;
                region->read(first, off, data, len);
        } else {
                // FIXME: We might want to do these properly in future
@@ -1802,8 +1806,6 @@
                break;
        case MR_Timbres:
                // Timbres
-               first += 128;
-               last += 128;
                region->write(first, off, data, len);
                for (unsigned int i = first; i <= last; i++) {
 #if MT32EMU_MONITOR_TIMBRES >= 1
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/munt-libmt32emu_2_8_1/mt32emu/src/Synth.h 
new/munt-libmt32emu_2_8_2/mt32emu/src/Synth.h
--- old/munt-libmt32emu_2_8_1/mt32emu/src/Synth.h       2026-05-23 
10:27:12.000000000 +0200
+++ new/munt-libmt32emu_2_8_2/mt32emu/src/Synth.h       2026-05-24 
22:11:28.000000000 +0200
@@ -239,7 +239,7 @@
 
        bool initPCMList(Bit16u mapAddress, Bit16u count);
        bool initTimbres(Bit16u mapAddress, Bit16u offset, Bit16u timbreCount, 
Bit16u startTimbre, bool compressed);
-       bool initCompressedTimbre(Bit16u drumNum, const Bit8u *mem, Bit32u 
memLen);
+       bool initCompressedTimbre(TimbresMemoryRegion &tempRegion, Bit16u 
absTimbreNum, const Bit8u *src, Bit32u srcLen);
        void initReverbModels(bool mt32CompatibleMode);
        void initSoundGroups(char newSoundGroupNames[][9]);
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/munt-libmt32emu_2_8_1/mt32emu/src/test/SynthTest.cpp 
new/munt-libmt32emu_2_8_2/mt32emu/src/test/SynthTest.cpp
--- old/munt-libmt32emu_2_8_1/mt32emu/src/test/SynthTest.cpp    2026-05-23 
10:27:12.000000000 +0200
+++ new/munt-libmt32emu_2_8_2/mt32emu/src/test/SynthTest.cpp    2026-05-24 
22:11:28.000000000 +0200
@@ -572,20 +572,51 @@
                0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x64, 0x64,
                0x64, 0x64
        };
+       static const Bit8u *timbreSysexData = timbreSysex + 3;
+       static const Bit32u timbreSysexDataLength = sizeof timbreSysex - 3;
 
        Synth synth;
        ROMSet romSet;
        romSet.initMT32New();
        openSynth(synth, romSet);
 
-       Bit8u timbreData[sizeof timbreSysex - 3];
+       Bit8u timbreData[timbreSysexDataLength];
 
-       synth.readMemory(0x023800, sizeof timbreData, timbreData);
-       checkSilence(timbreData, sizeof timbreData);
+       synth.readMemory(0x023800, timbreSysexDataLength, timbreData);
+       checkSilence(timbreData, timbreSysexDataLength);
 
        synth.writeSysex(16, timbreSysex, sizeof timbreSysex);
-       synth.readMemory(0x023800, sizeof timbreData, timbreData);
-       MT32EMU_CHECK_MEMORY_EQUAL(timbreData, timbreSysex + 3, sizeof 
timbreData);
+       synth.readMemory(0x023800, timbreSysexDataLength, timbreData);
+       MT32EMU_CHECK_MEMORY_EQUAL(timbreData, timbreSysexData, 
timbreSysexDataLength);
+}
+
+TEST_CASE("Synth should ignore SysEx writes to addresses right above Timbre 
Memory") {
+       static const Bit8u timbreSysex[] = {
+               0x09, 0x00, 0x00,
+               'T', 'e', 's', 't', '-', 's', 'i', 'n', 'e', '.'
+       };
+       static const Bit32u timbreSysexDataLength = sizeof timbreSysex - 3;
+
+       Synth synth;
+       ROMSet romSet;
+       romSet.initMT32New();
+       openSynth(synth, romSet);
+
+       Bit8u timbreData[timbreSysexDataLength];
+       memset(timbreData, 0, timbreSysexDataLength);
+
+       synth.readMemory(0x024000, timbreSysexDataLength, timbreData);
+       checkSilence(timbreData, timbreSysexDataLength);
+
+       const ReportedEvent expected[] = {
+               ReportedEvent::midiMessage(),
+               ReportedEvent::debugMessage("Sysex write to unrecognised 
address")
+       };
+       TestReportHandler<ReportHandler3> rh(expected);
+       synth.setReportHandler3(&rh);
+       synth.writeSysex(16, timbreSysex, sizeof timbreSysex);
+       synth.readMemory(0x024000, timbreSysexDataLength, timbreData);
+       checkSilence(timbreData, timbreSysexDataLength);
 }
 
 } // namespace Test
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/munt-libmt32emu_2_8_1/mt32emu/src/test/Testing.h 
new/munt-libmt32emu_2_8_2/mt32emu/src/test/Testing.h
--- old/munt-libmt32emu_2_8_1/mt32emu/src/test/Testing.h        2026-05-23 
10:27:12.000000000 +0200
+++ new/munt-libmt32emu_2_8_2/mt32emu/src/test/Testing.h        2026-05-24 
22:11:28.000000000 +0200
@@ -36,9 +36,7 @@
 do { \
        bool subStringFound = strstr(haystack, needle) != NULL; \
        const char *descr = subStringFound ? " CONTAINS " : " DOES NOT CONTAIN 
"; \
-       INFO(#haystack << descr << #needle "!"); \
-       CAPTURE(haystack); \
-       CAPTURE(needle); \
+       INFO("\n\t" #haystack " := '" << haystack << "'" << descr << #needle " 
:= '" << needle << "'!"); \
        CHECK(subStringFound); \
 } while(false)
 
@@ -48,9 +46,7 @@
                CHECK(data1 == data2); \
                break; \
        } \
-       CAPTURE(data1); \
-       CAPTURE(data2); \
-       CAPTURE(size); \
+       INFO("\n\t" #data1 " := " << data1 << "\n\t" #data2 " := " << data2 << 
"\n\t" #size " := " << size); \
        CHECK(memcmp(data1, data2, size) == 0); \
 } while(false)
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/munt-libmt32emu_2_8_1/mt32emu_qt/NEWS.txt 
new/munt-libmt32emu_2_8_2/mt32emu_qt/NEWS.txt
--- old/munt-libmt32emu_2_8_1/mt32emu_qt/NEWS.txt       2026-05-23 
10:27:12.000000000 +0200
+++ new/munt-libmt32emu_2_8_2/mt32emu_qt/NEWS.txt       2026-05-24 
22:11:28.000000000 +0200
@@ -1,3 +1,9 @@
+2026-05-24:
+
+       1.12.1 released.
+
+       * Updated mt32emu library to version 2.8.2.
+
 2026-05-16:
 
        1.12.0 released.
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/munt-libmt32emu_2_8_1/mt32emu_qt/cmake/project_data.cmake 
new/munt-libmt32emu_2_8_2/mt32emu_qt/cmake/project_data.cmake
--- old/munt-libmt32emu_2_8_1/mt32emu_qt/cmake/project_data.cmake       
2026-05-23 10:27:12.000000000 +0200
+++ new/munt-libmt32emu_2_8_2/mt32emu_qt/cmake/project_data.cmake       
2026-05-24 22:11:28.000000000 +0200
@@ -4,5 +4,5 @@
 
 set(mt32emu_qt_VERSION_MAJOR 1)
 set(mt32emu_qt_VERSION_MINOR 12)
-set(mt32emu_qt_VERSION_PATCH 0)
+set(mt32emu_qt_VERSION_PATCH 1)
 set(mt32emu_qt_VERSION 
"${mt32emu_qt_VERSION_MAJOR}.${mt32emu_qt_VERSION_MINOR}.${mt32emu_qt_VERSION_PATCH}")
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/munt-libmt32emu_2_8_1/mt32emu_smf2wav/cmake/project_data.cmake 
new/munt-libmt32emu_2_8_2/mt32emu_smf2wav/cmake/project_data.cmake
--- old/munt-libmt32emu_2_8_1/mt32emu_smf2wav/cmake/project_data.cmake  
2026-05-23 10:27:12.000000000 +0200
+++ new/munt-libmt32emu_2_8_2/mt32emu_smf2wav/cmake/project_data.cmake  
2026-05-24 22:11:28.000000000 +0200
@@ -4,5 +4,5 @@
 
 set(mt32emu_smf2wav_VERSION_MAJOR 1)
 set(mt32emu_smf2wav_VERSION_MINOR 9)
-set(mt32emu_smf2wav_VERSION_PATCH 1)
+set(mt32emu_smf2wav_VERSION_PATCH 2)
 set(mt32emu_smf2wav_VERSION 
"${mt32emu_smf2wav_VERSION_MAJOR}.${mt32emu_smf2wav_VERSION_MINOR}.${mt32emu_smf2wav_VERSION_PATCH}")
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/munt-libmt32emu_2_8_1/mt32emu_win32drv/NEWS.txt 
new/munt-libmt32emu_2_8_2/mt32emu_win32drv/NEWS.txt
--- old/munt-libmt32emu_2_8_1/mt32emu_win32drv/NEWS.txt 2026-05-23 
10:27:12.000000000 +0200
+++ new/munt-libmt32emu_2_8_2/mt32emu_win32drv/NEWS.txt 2026-05-24 
22:11:28.000000000 +0200
@@ -1,3 +1,9 @@
+2026-05-24:
+
+       1.9.1 released.
+
+       * Updated mt32emu library to version 2.8.2.
+
 2026-05-16:
 
        1.9.0 released.
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/munt-libmt32emu_2_8_1/mt32emu_win32drv/cmake/project_data.cmake 
new/munt-libmt32emu_2_8_2/mt32emu_win32drv/cmake/project_data.cmake
--- old/munt-libmt32emu_2_8_1/mt32emu_win32drv/cmake/project_data.cmake 
2026-05-23 10:27:12.000000000 +0200
+++ new/munt-libmt32emu_2_8_2/mt32emu_win32drv/cmake/project_data.cmake 
2026-05-24 22:11:28.000000000 +0200
@@ -4,5 +4,5 @@
 
 set(mt32emu_win32drv_VERSION_MAJOR 1)
 set(mt32emu_win32drv_VERSION_MINOR 9)
-set(mt32emu_win32drv_VERSION_PATCH 0)
+set(mt32emu_win32drv_VERSION_PATCH 1)
 set(mt32emu_win32drv_VERSION 
"${mt32emu_win32drv_VERSION_MAJOR}.${mt32emu_win32drv_VERSION_MINOR}.${mt32emu_win32drv_VERSION_PATCH}")

Reply via email to