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-11-03 18:32:12
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/mt32emu (Old)
 and      /work/SRC/openSUSE:Factory/.mt32emu.new.1257 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "mt32emu"

Tue Nov  3 18:32:12 2026 rev:18 rq:1394743 version:2.8.5

Changes:
--------
--- /work/SRC/openSUSE:Factory/mt32emu/mt32emu.changes  2026-06-08 
14:28:03.887888663 +0200
+++ /work/SRC/openSUSE:Factory/.mt32emu.new.1257/mt32emu.changes        
2026-11-03 18:32:14.533555071 +0100
@@ -1,0 +2,15 @@
+Tue Nov  3 16:21:57 UTC 2026 - Martin Hauke <[email protected]>
+
+- Update to 2.8.5
+  * Fixed a portability issue in unit tests. (#150).
+
+-------------------------------------------------------------------
+Tue Nov  3 09:51:42 UTC 2026 - Martin Hauke <[email protected]>
+
+- Update to 2.8.4
+  * Fixed a heap buffer overflow in the MIDI stream parser that
+    occurred when the client submitted a fragmented SysEx message
+    with the first fragment exceeding the maximum supported size.
+    (#149).
+
+-------------------------------------------------------------------

Old:
----
  munt-libmt32emu_2_8_3.tar.gz

New:
----
  munt-libmt32emu_2_8_5.tar.gz

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

Other differences:
------------------
++++++ mt32emu.spec ++++++
--- /var/tmp/diff_new_pack.I1nUBT/_old  2026-11-03 18:32:16.833650210 +0100
+++ /var/tmp/diff_new_pack.I1nUBT/_new  2026-11-03 18:32:16.835650293 +0100
@@ -17,10 +17,10 @@
 
 
 %define s_name  munt-lib%{name}_%{s_ver}
-%define s_ver   2_8_3
+%define s_ver   2_8_5
 %define sover   2
 Name:           mt32emu
-Version:        2.8.3
+Version:        2.8.5
 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_3.tar.gz -> munt-libmt32emu_2_8_5.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/munt-libmt32emu_2_8_3/.github/workflows/build-appimages.yml 
new/munt-libmt32emu_2_8_5/.github/workflows/build-appimages.yml
--- old/munt-libmt32emu_2_8_3/.github/workflows/build-appimages.yml     
2026-06-06 15:58:54.000000000 +0200
+++ new/munt-libmt32emu_2_8_5/.github/workflows/build-appimages.yml     
2026-11-03 13:34:11.000000000 +0100
@@ -8,21 +8,20 @@
     runs-on: ubuntu-latest
 
     steps:
-    - uses: actions/checkout@v4
+    - uses: actions/checkout@v6
 
     - name: Checkout Qt
       uses: actions/download-artifact@v8
       with:
-        path: ${{ github.workspace }}
+        name: ${{ vars.QT_ARTIFACT_LINUX }}
         github-token: ${{ secrets.GITHUB_TOKEN }}
-        repository: sergm/munt
-        run-id: 26723258340
-        artifact-ids: 7319942079
+        repository: munt/munt
+        run-id: ${{ vars.QT_RUN_LINUX }}
 
     - name: Unpack dependencies
       run: |
         mkdir qt
-        tar xf qt_6_11_1_linux_x64.tgz -C qt
+        tar xf ${{ vars.QT_ARTIFACT_LINUX }} -C qt
 
     - name: Get linuxdeploy
       run: |
@@ -94,11 +93,11 @@
     - uses: actions/upload-artifact@v7
       name: Upload mt32emu_smf2wav-x86_64.AppImage
       with:
-        path: ${{ github.workspace }}/mt32emu-smf2wav-x86_64.AppImage
+        path: mt32emu-smf2wav-x86_64.AppImage
         archive: false
 
     - uses: actions/upload-artifact@v7
       name: Upload MT-32_Emulator-x86_64.AppImage
       with:
-        path: ${{ github.workspace }}/MT-32_Emulator-x86_64.AppImage
+        path: MT-32_Emulator-x86_64.AppImage
         archive: false
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/munt-libmt32emu_2_8_3/.github/workflows/build-mt32emu-qt.yml 
new/munt-libmt32emu_2_8_5/.github/workflows/build-mt32emu-qt.yml
--- old/munt-libmt32emu_2_8_3/.github/workflows/build-mt32emu-qt.yml    
2026-06-06 15:58:54.000000000 +0200
+++ new/munt-libmt32emu_2_8_5/.github/workflows/build-mt32emu-qt.yml    
2026-11-03 13:34:11.000000000 +0100
@@ -1,7 +1,17 @@
 name: Build fat mt32emu-qt binary
 
 on:
-  workflow_dispatch
+  workflow_dispatch:
+    inputs:
+      buildType:
+        required: true
+        type: choice
+        options:
+          - Snapshot
+          - Release
+
+env:
+  BUILD_SNAPSHOTS: ${{ case(inputs.buildType == 'Snapshot', 'ON', 'OFF') }}
 
 jobs:
   build-mt32emu-qt-windows:
@@ -10,108 +20,116 @@
     defaults:
       run:
         shell: cmd
-        working-directory: ${{ github.workspace }}
 
     steps:
-    - uses: actions/checkout@v4
+    - uses: actions/checkout@v6
 
-    - name: Checkout portaudio
+    - name: Get Qt static binary
       uses: actions/download-artifact@v8
       with:
-        name: portaudio-win64.tgz
-        path: ${{ github.workspace }}
+        name: ${{ vars.QT_ARTIFACT_WIN }}
         github-token: ${{ secrets.GITHUB_TOKEN }}
-        repository: sergm/munt
-        run-id: 26477630535
+        repository: munt/munt
+        run-id: ${{ vars.QT_RUN_WIN }}
 
-    - name: Checkout Qt
-      uses: actions/download-artifact@v8
-      with:
-        name: qt_6_11_1_win64.tgz
-        path: ${{ github.workspace }}
-        github-token: ${{ secrets.GITHUB_TOKEN }}
-        repository: sergm/munt
-        run-id: 26478191762
+    - name: Unpack Qt
+      shell: bash
+      run: |
+        tar xf ${{ vars.QT_ARTIFACT_WIN }}
+        echo '#include <mt32emu/mt32emu.h>
+        #include <QtWidgets>
+        #undef NOMINMAX
+        #define NOMINMAX
+        #include <windows.h>' > pch.h
 
-    - name: Unpack dependencies
+    - name: Get munt icon
       run: |
-        mkdir portaudio
-        tar xf portaudio-win64.tgz -C portaudio
-        tar xf qt_6_11_1_win64.tgz
+        C:\msys64\usr\bin\wget -q 
https://github.com/sergm/munt_devel/raw/refs/heads/master/mt32emu_win32_installer/mt32emu-qt.ico.xz
+        xz -d mt32emu-qt.ico.xz
+
+    - name: Get portaudio sources
+      run: git clone --depth=1 --revision=${{ vars.PORTAUDIO_REVISION }} 
https://github.com/PortAudio/portaudio
 
-    - name: Get Jack
+    - name: Get Jack sources
       run: |
-        git clone --depth=1 --revision=refs/tags/v1.9.22 
https://github.com/jackaudio/jack2.git
+        git clone --depth=1 --revision=${{ vars.JACK_REVISION }} 
https://github.com/jackaudio/jack2.git
         type NUL > jack2\libjack64.lib
 
     - name: Assemble
       run: >
-        "C:\Program Files\Microsoft Visual 
Studio\2022\Enterprise\VC\Auxiliary\Build\vcvars64.bat" &&
-        cmake -S . -B build -G Ninja
-        -D BUILD_SNAPSHOTS=ON
+        "${{ vars.MSVC_ENV_INIT_SCRIPT }}"
+        && cmake -S portaudio -B portaudio/build -G Ninja
+        -D CMAKE_BUILD_TYPE=Release
+        -D CMAKE_POLICY_VERSION_MINIMUM=3.5
+        -D PA_BUILD_SHARED=OFF
+        -D PA_LIBNAME_ADD_SUFFIX:BOOL=OFF
+        && cmake --build portaudio/build
+        && cmake -S . -B build -G Ninja
+        -D BUILD_SNAPSHOTS=%BUILD_SNAPSHOTS%
         -D BUILD_TESTING=OFF
         -D CMAKE_BUILD_TYPE=Release
+        -D CMAKE_EXE_LINKER_FLAGS_RELEASE:STRING="/INCREMENTAL:NO 
/FORCE:MULTIPLE"
         -D 
CMAKE_MSVC_RUNTIME_LIBRARY:STRING="MultiThreaded$<$<CONFIG:Debug>:Debug>"
         -D CMAKE_PREFIX_PATH=${{ github.workspace }}/stage
-        -D JACK_INCLUDE_DIR:PATH=${{ github.workspace }}/jack2/common
-        -D JACK_LIBRARY:FILEPATH=${{ github.workspace }}/jack2/libjack64.lib
-        -D PORTAUDIO_INCLUDE_DIR=${{ github.workspace 
}}/portaudio/stage/include
-        -D PORTAUDIO_LIBRARY=${{ github.workspace 
}}/portaudio/stage/lib/portaudio_static_x64.lib
+        -D JACK_INCLUDE_DIR:PATH=jack2/common
+        -D JACK_LIBRARY:FILEPATH=jack2/libjack64.lib
+        -D PORTAUDIO_INCLUDE_DIR=portaudio/include
+        -D PORTAUDIO_LIBRARY=portaudio/build/portaudio.lib
         -D libmt32emu_PACKAGE_TYPE=Runtime
+        -D mt32emu-qt_PRECOMPILED_HEADER:FILEPATH=${{ github.workspace }}/pch.h
         -D mt32emu-qt_USE_JACK_DYNAMIC_LOADING:BOOL=ON
         -D munt_WITH_MT32EMU_SMF2WAV:BOOL=OFF
-        -D munt_WITH_MT32EMU_WIN32DRV:BOOL=OFF &&
-        cmake --build build &&
-        cmake --install build --prefix snapshot --component Runtime
+        -D munt_WITH_MT32EMU_WIN32DRV:BOOL=OFF
+        && cmake --build build
+        && cmake --install build --prefix snapshot --component Runtime
 
     - name: Package
       run: |
         cd snapshot
         move bin\mt32emu-qt.exe .
-        move share\doc .
+        move ..\mt32emu-qt.ico .
+        move share\doc\munt docs
+        move docs\mt32emu-qt\README.md .
         rmdir /s/q bin share
 
     - uses: actions/upload-artifact@v7
       name: Upload
       with:
-        path: ${{ github.workspace }}/snapshot
+        path: snapshot
         name: mt32emu_qt_win11_x64
         archive: true
 
   build-mt32emu-qt-macos:
     runs-on: macos-latest
 
-    defaults:
-      run:
-        shell: bash
-        working-directory: ${{ github.workspace }}
-
     steps:
-    - uses: actions/checkout@v4
+    - uses: actions/checkout@v6
 
-    - name: Checkout portaudio
+    - name: Get Qt static binary
       uses: actions/download-artifact@v8
       with:
-        name: portaudio-macos.tgz
-        path: ${{ github.workspace }}
+        name: ${{ vars.QT_ARTIFACT_MACOS }}
         github-token: ${{ secrets.GITHUB_TOKEN }}
-        repository: sergm/munt
-        run-id: 26477630535
+        repository: munt/munt
+        run-id: ${{ vars.QT_RUN_MACOS }}
 
-    - name: Checkout Qt
-      uses: actions/download-artifact@v8
-      with:
-        name: qt_6_11_1_macos.tgz
-        path: ${{ github.workspace }}
-        github-token: ${{ secrets.GITHUB_TOKEN }}
-        repository: sergm/munt
-        run-id: 26478191762
-
-    - name: Unpack dependencies
+    - name: Unpack Qt
       run: |
-        mkdir portaudio
-        tar xf portaudio-macos.tgz -C portaudio
-        tar xf qt_6_11_1_macos.tgz
+        tar xf ${{ vars.QT_ARTIFACT_MACOS }}
+
+    - name: Get portaudio sources
+      run: git clone --depth=1 --revision=${{ vars.PORTAUDIO_REVISION }} 
https://github.com/PortAudio/portaudio
+
+    - name: Configure portaudio
+      run: >
+        cmake -S portaudio -B portaudio/build -G Ninja
+        -D CMAKE_BUILD_TYPE=Release
+        -D CMAKE_POLICY_VERSION_MINIMUM=3.5
+        -D CMAKE_OSX_DEPLOYMENT_TARGET:STRING=${{ vars.OSX_DEPLOYMENT_TARGET }}
+        -D PA_BUILD_SHARED=OFF
+
+    - name: Build portaudio
+      run: cmake --build portaudio/build
 
     - name: Build Resources
       run: |
@@ -131,24 +149,24 @@
         cd ..
         iconutil -c icns MT32Emu.iconset
 
-    - name: Configure
+    - name: Configure mt32emu-qt
       run: >
         cmake -S . -B build -G Ninja
-        -D BUILD_SNAPSHOTS=ON
+        -D BUILD_SNAPSHOTS=$BUILD_SNAPSHOTS
         -D BUILD_TESTING=OFF
         -D CMAKE_BUILD_TYPE=Release
-        -D CMAKE_OSX_DEPLOYMENT_TARGET:STRING=13.0
+        -D CMAKE_OSX_DEPLOYMENT_TARGET:STRING=${{ vars.OSX_DEPLOYMENT_TARGET }}
         -D CMAKE_PREFIX_PATH=${{ github.workspace }}/stage
         -D MACOSX_BUNDLE_ICON_FILE:STRING=MT32Emu.icns
-        -D PORTAUDIO_INCLUDE_DIR=${{ github.workspace 
}}/portaudio/stage/include
-        -D PORTAUDIO_LIBRARY=${{ github.workspace 
}}/portaudio/stage/lib/libportaudio.a
+        -D PORTAUDIO_INCLUDE_DIR=portaudio/include
+        -D PORTAUDIO_LIBRARY=portaudio/build/libportaudio.a
         -D libmt32emu_PACKAGE_TYPE=Runtime
         -D munt_WITH_MT32EMU_SMF2WAV:BOOL=OFF
 
-    - name: Build
+    - name: Build mt32emu-qt
       run: cmake --build build
 
-    - name: Package
+    - name: Package mt32emu-qt
       run: |
         cmake --install build --prefix snapshot --component Runtime --strip
         cd snapshot
@@ -161,7 +179,7 @@
         tar czf ../mt32emu_qt_macos_arm64.tgz *
 
     - uses: actions/upload-artifact@v7
-      name: Upload
+      name: Upload mt32emu-qt
       with:
-        path: ${{ github.workspace }}/mt32emu_qt_macos_arm64.tgz
+        path: mt32emu_qt_macos_arm64.tgz
         archive: false
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/munt-libmt32emu_2_8_3/.github/workflows/build-mt32emu-smf2wav.yml 
new/munt-libmt32emu_2_8_5/.github/workflows/build-mt32emu-smf2wav.yml
--- old/munt-libmt32emu_2_8_3/.github/workflows/build-mt32emu-smf2wav.yml       
1970-01-01 01:00:00.000000000 +0100
+++ new/munt-libmt32emu_2_8_5/.github/workflows/build-mt32emu-smf2wav.yml       
2026-11-03 13:34:11.000000000 +0100
@@ -0,0 +1,61 @@
+name: Build mt32emu-smf2wav binary bundle
+
+on:
+  workflow_dispatch:
+    inputs:
+      buildType:
+        required: true
+        type: choice
+        options:
+          - Snapshot
+          - Release
+
+env:
+  BUILD_SNAPSHOTS: ${{ case(inputs.buildType == 'Snapshot', 'ON', 'OFF') }}
+
+jobs:
+  build-mt32emu-smf2wav-windows:
+    runs-on: windows-latest
+
+    defaults:
+      run:
+        shell: cmd
+
+    steps:
+    - uses: actions/checkout@v6
+
+    - name: Install dependencies
+      run: |
+        C:\msys64\usr\bin\pacman -Sy --noconfirm mingw-w64-x86_64-glib2
+
+    - name: Assemble
+      run: >
+        "${{ vars.MSVC_ENV_INIT_SCRIPT }}"
+        && cmake -S . -B build -G Ninja
+        -D BUILD_SNAPSHOTS=%BUILD_SNAPSHOTS%
+        -D BUILD_TESTING=OFF
+        -D CMAKE_BUILD_TYPE=Release
+        -D 
CMAKE_MSVC_RUNTIME_LIBRARY:STRING="MultiThreaded$<$<CONFIG:Debug>:Debug>"
+        -D CMAKE_PREFIX_PATH=C:/msys64/mingw64
+        -D GLIB2_LIBRARY:FILEPATH=C:/msys64/mingw64/lib/libglib-2.0.dll.a
+        -D libmt32emu_PACKAGE_TYPE=Runtime
+        -D munt_WITH_MT32EMU_QT:BOOL=OFF
+        -D munt_WITH_MT32EMU_WIN32DRV:BOOL=OFF
+        && cmake --build build
+        && cmake --install build --prefix stage --component Runtime
+
+    - name: Package
+      run: |
+        cd stage
+        move bin\mt32emu-smf2wav.exe .
+        for %%1 in (libgcc_s_seh-1.dll libglib-2.0-0.dll libiconv-2.dll 
libintl-8.dll libpcre2-8-0.dll libstdc++-6.dll libwinpthread-1.dll) do move 
"C:\msys64\mingw64\bin\%%1" .
+        move share\doc\munt docs
+        move docs\smf2wav\README.md .
+        rmdir /s/q bin share
+
+    - uses: actions/upload-artifact@v7
+      name: Upload
+      with:
+        path: stage
+        name: mt32emu_smf2wav_win64
+        archive: true
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/munt-libmt32emu_2_8_3/.github/workflows/build-portaudio.yml 
new/munt-libmt32emu_2_8_5/.github/workflows/build-portaudio.yml
--- old/munt-libmt32emu_2_8_3/.github/workflows/build-portaudio.yml     
2026-06-06 15:58:54.000000000 +0200
+++ new/munt-libmt32emu_2_8_5/.github/workflows/build-portaudio.yml     
1970-01-01 01:00:00.000000000 +0100
@@ -1,75 +0,0 @@
-name: Build PortAudio
-
-on:
-  workflow_dispatch
-
-jobs:
-  build-portaudio-windows:
-    runs-on: windows-latest
-
-    defaults:
-      run:
-        shell: cmd
-        working-directory: ${{ github.workspace }}
-
-    steps:
-    - name: Get sources
-      run: git clone --depth=1 --revision=refs/tags/v19.7.0 
https://github.com/PortAudio/portaudio
-
-    - name: Assemble
-      run: >
-        "C:\Program Files\Microsoft Visual 
Studio\2022\Enterprise\VC\Auxiliary\Build\vcvars64.bat" &&
-        cmake -S portaudio -B build -G Ninja
-        -D CMAKE_BUILD_TYPE=Release
-        -D CMAKE_INSTALL_PREFIX=stage
-        -D CMAKE_POLICY_VERSION_MINIMUM=3.5
-        -D PA_BUILD_SHARED=OFF &&
-        cmake --build build &&
-        cmake --install build --prefix stage
-
-    - name: Pack
-      run: tar czf portaudio-win64.tgz stage
-
-    - uses: actions/upload-artifact@v7
-      name: Upload
-      with:
-        path: ${{ github.workspace }}/portaudio-win64.tgz
-        name: portaudio-win64
-        archive: false
-
-  build-portaudio-macos:
-    runs-on: macos-latest
-
-    defaults:
-      run:
-        shell: bash
-        working-directory: ${{ github.workspace }}
-
-    steps:
-    - name: Get sources
-      run: git clone --depth=1 --revision=refs/tags/v19.7.0 
https://github.com/PortAudio/portaudio
-
-    - name: Configure
-      run: >
-        cmake -S portaudio -B build -G Ninja
-        -D CMAKE_BUILD_TYPE=Release
-        -D CMAKE_INSTALL_PREFIX=stage
-        -D CMAKE_POLICY_VERSION_MINIMUM=3.5
-        -D CMAKE_OSX_DEPLOYMENT_TARGET:STRING=13.0
-        -D PA_BUILD_SHARED=OFF
-
-    - name: Build
-      run: cmake --build build
-
-    - name: Stage
-      run: cmake --install build --prefix stage
-
-    - name: Pack
-      run: tar czf portaudio-macos.tgz stage
-
-    - uses: actions/upload-artifact@v7
-      name: Upload
-      with:
-        path: ${{ github.workspace }}/portaudio-macos.tgz
-        name: portaudio-macos
-        archive: false
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/munt-libmt32emu_2_8_3/.github/workflows/build-qt.yml 
new/munt-libmt32emu_2_8_5/.github/workflows/build-qt.yml
--- old/munt-libmt32emu_2_8_3/.github/workflows/build-qt.yml    2026-06-06 
15:58:54.000000000 +0200
+++ new/munt-libmt32emu_2_8_5/.github/workflows/build-qt.yml    2026-11-03 
13:34:11.000000000 +0100
@@ -4,94 +4,92 @@
   workflow_dispatch
 
 jobs:
-  build-qt-windows:
-    runs-on: windows-latest
-
-    defaults:
-      run:
-        shell: cmd
-        working-directory: ${{ github.workspace }}
+  fetch-qt:
+    runs-on: ubuntu-latest
 
     steps:
+    - name: Cache qt sources
+      id: cache-qt
+      uses: actions/cache@v5
+      with:
+        key: qt-src-${{ vars.QT_REVISION }}
+        path: qt5
+        enableCrossOsArchive: 'true'
+        lookup-only: 'true'
+
     - name: Get super repo
-      run: git clone --depth=1 --revision=refs/tags/v6.11.1 
https://code.qt.io/qt/qt5.git
+      if: steps.cache-qt.outputs.cache-hit != 'true'
+      run: git clone --depth=1 --revision=${{ vars.QT_REVISION }} 
https://code.qt.io/qt/qt5.git
 
     - name: Get submodules
-      working-directory: ${{ github.workspace }}/qt5
-      run: git submodule update --init --depth=1 qtbase
-
-    - name: Assemble
-      run: >
-        "C:\Program Files\Microsoft Visual 
Studio\2022\Enterprise\VC\Auxiliary\Build\vcvars64.bat" &&
-        cmake -S qt5 -B build -G Ninja
-        -D BUILD_SHARED_LIBS:BOOL=OFF
-        -D CMAKE_BUILD_TYPE=Release
-        -D CMAKE_INSTALL_PREFIX=stage
-        -D FEATURE_static_runtime:BOOL=ON
-        -D FEATURE_printsupport:BOOL=OFF
-        -D FEATURE_testlib:BOOL=OFF
-        -D FEATURE_sql:BOOL=OFF
-        -D FEATURE_xml:BOOL=OFF &&
-        cmake --build build &&
-        cmake --install build
-
-    - name: Pack
-      run: tar czf qt_6_11_1_win64.tgz stage
-
-    - uses: actions/upload-artifact@v7
-      name: Upload
-      with:
-        path: ${{ github.workspace }}/qt_6_11_1_win64.tgz
-        archive: false
+      if: steps.cache-qt.outputs.cache-hit != 'true'
+      working-directory: qt5
+      run: git submodule update --init --depth=1 qtbase qtshadertools 
qtmultimedia
 
-  build-qt-macos:
-    runs-on: macos-latest
+  build-qt:
+    needs: fetch-qt
+    runs-on: ${{ matrix.os }}
+
+    strategy:
+      matrix:
+        os: [ubuntu-latest, macos-latest, windows-latest]
 
     defaults:
       run:
         shell: bash
-        working-directory: ${{ github.workspace }}
 
-    steps:
-    - name: Get super repo
-      run: git clone --depth=1 --revision=refs/tags/v6.11.1 
https://code.qt.io/qt/qt5.git
-
-    - name: Get submodules
-      working-directory: ${{ github.workspace }}/qt5
-      run: git submodule update --init --depth=1 qtbase qtshadertools 
qtmultimedia
-
-    - name: Configure
-      run: >
-        cmake -S qt5 -B build -G Ninja
+    env:
+      CMAKE_CONFIG_FLAGS: >-
+        -S qt5 -B build -G Ninja
         -D BUILD_SHARED_LIBS:BOOL=OFF
         -D CMAKE_BUILD_TYPE=Release
         -D CMAKE_INSTALL_PREFIX=stage
+      QT_FEATURE_FLAGS: >-
+        -D FEATURE_androiddeployqt:BOOL=OFF
+        -D FEATURE_macdeployqt:BOOL=OFF
+        -D FEATURE_network:BOOL=OFF
+        -D FEATURE_pdf:BOOL=OFF
         -D FEATURE_printsupport:BOOL=OFF
         -D FEATURE_testlib:BOOL=OFF
         -D FEATURE_sql:BOOL=OFF
+        -D FEATURE_windeployqt:BOOL=OFF
         -D FEATURE_xml:BOOL=OFF
+        -D INPUT_libjpeg:STRING=no
 
-    - name: Build
-      run: cmake --build build
-
-    - name: Stage
-      run: cmake --install build
-
-    - name: Pack
-      run: tar czf qt_6_11_1_macos.tgz stage
-
-    - uses: actions/upload-artifact@v7
-      name: Upload
+    steps:
+    - name: Get qt sources
+      id: cache-qt
+      uses: actions/cache@v5
       with:
-        path: ${{ github.workspace }}/qt_6_11_1_macos.tgz
-        archive: false
+        key: qt-src-${{ vars.QT_REVISION }}
+        path: qt5
+        enableCrossOsArchive: 'true'
+        fail-on-cache-miss: 'true'
+
+    - name: Assemble for Windows
+      if: runner.os == 'Windows'
+      shell: cmd
+      run: >
+        "${{ vars.MSVC_ENV_INIT_SCRIPT }}"
+        && cmake ${{ env.CMAKE_CONFIG_FLAGS }}
+        -D FEATURE_static_runtime:BOOL=ON
+        ${{ env.QT_FEATURE_FLAGS }}
+        && cmake --build build
+        && cmake --install build
+        && echo QT_ARTIFACT=${{ vars.QT_ARTIFACT_WIN }}>> %GITHUB_ENV%
 
-  build-qt-linux:
-    runs-on: ubuntu-latest
+    - name: Assemble for macOS
+      if: runner.os == 'macOS'
+      run: |
+        cmake ${{ env.CMAKE_CONFIG_FLAGS }} ${{ env.QT_FEATURE_FLAGS }}
+        cmake --build build
+        cmake --install build
+        echo QT_ARTIFACT="${{ vars.QT_ARTIFACT_MACOS }}" >> $GITHUB_ENV
 
-    steps:
-    - name: Assemble
+    - name: Assemble for Linux
+      if: runner.os == 'Linux'
       run: |
+        echo QT_ARTIFACT="${{ vars.QT_ARTIFACT_LINUX }}" >> $GITHUB_ENV
         cat <<'EOF' >> build.sh
         #!/bin/bash
         set -e
@@ -101,27 +99,21 @@
           xcb-util-keysyms-devel xcb-util-renderutil-devel xcb-util-wm-devel 
libxkbcommon-devel \
           libxkbcommon-x11-devel pulseaudio-libs-devel
         source /opt/rh/gcc-toolset-10/enable
-        mkdir /home/munt/qt
-        cd /home/munt/qt
-        git clone --depth=1 --branch=v6.11.1 https://code.qt.io/qt/qt5.git
-        cd qt5
-        git submodule update --init --depth=1 qtbase qtshadertools qtmultimedia
-        cd ..
-        cmake -S qt5 -B build -G Ninja -D BUILD_SHARED_LIBS:BOOL=OFF -D 
CMAKE_BUILD_TYPE=Release -D CMAKE_INSTALL_PREFIX=stage \
-          -D FEATURE_androiddeployqt:BOOL=OFF -D FEATURE_network:BOOL=OFF \
-          -D FEATURE_pdf:BOOL=OFF -D FEATURE_printsupport:BOOL=OFF -D 
FEATURE_testlib:BOOL=OFF -D FEATURE_sql:BOOL=OFF \
-          -D FEATURE_xml:BOOL=OFF -D INPUT_libjpeg:STRING=no
+        cd /home/munt
+        cmake ${{ env.CMAKE_CONFIG_FLAGS }} ${{ env.QT_FEATURE_FLAGS }}
         cmake --build build
         cmake --install build
-        tar czf qt_6_11_1_linux_x64.tgz stage
         EOF
         chmod a+x build.sh
         podman run --mount type=bind,source=.,destination=/home/munt \
           --rm \
           ghcr.io/almalinux/8-toolbox /home/munt/build.sh
 
+    - name: Pack
+      run: tar czf $QT_ARTIFACT stage
+
     - uses: actions/upload-artifact@v7
       name: Upload
       with:
-        path: ${{ github.workspace }}/qt/qt_6_11_1_linux_x64.tgz
+        path: ${{ env.QT_ARTIFACT }}
         archive: false
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/munt-libmt32emu_2_8_3/.github/workflows/build-release-packages.yml 
new/munt-libmt32emu_2_8_5/.github/workflows/build-release-packages.yml
--- old/munt-libmt32emu_2_8_3/.github/workflows/build-release-packages.yml      
2026-06-06 15:58:54.000000000 +0200
+++ new/munt-libmt32emu_2_8_5/.github/workflows/build-release-packages.yml      
2026-11-03 13:34:11.000000000 +0100
@@ -1,4 +1,4 @@
-name: Build release packages
+name: Build Linux release packages
 
 on:
   workflow_dispatch
@@ -7,13 +7,8 @@
   build-ubuntu-packages:
     runs-on: ubuntu-latest
 
-    defaults:
-      run:
-        shell: bash
-        working-directory: ${{ github.workspace }}
-
     steps:
-    - uses: actions/checkout@v4
+    - uses: actions/checkout@v6
 
     - name: Install dependencies for libmt32emu
       run: |
@@ -22,8 +17,7 @@
 
     - name: Configure libmt32emu
       run: >
-        cmake -S mt32emu -B build
-        -G Ninja
+        cmake -S mt32emu -B build -G Ninja
         -D CMAKE_BUILD_TYPE=Release
         -D libmt32emu_PACKAGE_TYPE=Runtime
         -D libmt32emu_WITH_VERSION_TAGGING=ON
@@ -33,34 +27,34 @@
       run: cmake --build build
 
     - name: Test libmt32emu
-      working-directory: ${{ github.workspace }}/build
+      working-directory: build
       run: ctest -V
 
     - name: Package libmt32emu
-      working-directory: ${{ github.workspace }}/build
+      working-directory: build
       run: cpack -G DEB
 
     - uses: actions/upload-artifact@v7
       name: Upload libmt32emu
       with:
-        path: ${{ github.workspace }}/build/libmt32emu-*.deb
+        path: 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
+      working-directory: build
       run: cpack -G DEB
 
     - uses: actions/upload-artifact@v7
       name: Upload libmt32emu-dev
       with:
-        path: ${{ github.workspace }}/build/libmt32emu-dev-*.deb
+        path: build/libmt32emu-dev-*.deb
         archive: false
 
     - name: Install dependencies for mt32emu-smf2wav
-      working-directory: ${{ github.workspace }}/build
+      working-directory: build
       run: |
         sudo dpkg -i libmt32emu-*.deb
         sudo dpkg -i libmt32emu-dev-*.deb
@@ -71,21 +65,20 @@
 
     - name: Configure mt32emu-smf2wav
       run: >
-        cmake -S mt32emu_smf2wav -B build
-        -G Ninja
+        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
+      working-directory: build
       run: cpack -G DEB
 
     - uses: actions/upload-artifact@v7
       name: Upload mt32emu-smf2wav
       with:
-        path: ${{ github.workspace }}/build/mt32emu-smf2wav-*.deb
+        path: build/mt32emu-smf2wav-*.deb
         archive: false
 
     - name: Clean build directory
@@ -96,8 +89,7 @@
 
     - name: Configure mt32emu-qt
       run: >
-        cmake -S mt32emu_qt -B build
-        -G Ninja
+        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
@@ -106,20 +98,20 @@
       run: cmake --build build
 
     - name: Package mt32emu-qt
-      working-directory: ${{ github.workspace }}/build
+      working-directory: build
       run: cpack -G DEB
 
     - uses: actions/upload-artifact@v7
       name: Upload mt32emu-qt
       with:
-        path: ${{ github.workspace }}/build/mt32emu-qt-*.deb
+        path: build/mt32emu-qt-*.deb
         archive: false
 
   build-rpms:
     runs-on: ubuntu-latest
 
     steps:
-    - uses: actions/checkout@v4
+    - uses: actions/checkout@v6
 
     - name: Assemble
       run: |
@@ -166,7 +158,7 @@
     - uses: actions/upload-artifact@v7
       name: Upload libmt32emu-devel
       with:
-        path: ${{ github.workspace }}/build/mt32emu/libmt32emu-devel-*.rpm
+        path: build/mt32emu/libmt32emu-devel-*.rpm
         archive: false
 
     - name: Wipe libmt32emu-devel
@@ -175,17 +167,17 @@
     - uses: actions/upload-artifact@v7
       name: Upload libmt32emu
       with:
-        path: ${{ github.workspace }}/build/mt32emu/libmt32emu-*.rpm
+        path: build/mt32emu/libmt32emu-*.rpm
         archive: false
 
     - uses: actions/upload-artifact@v7
       name: Upload mt32emu-smf2wav
       with:
-        path: ${{ github.workspace 
}}/build/mt32emu_smf2wav/mt32emu-smf2wav-*.rpm
+        path: build/mt32emu_smf2wav/mt32emu-smf2wav-*.rpm
         archive: false
 
     - uses: actions/upload-artifact@v7
       name: Upload mt32emu-qt
       with:
-        path: ${{ github.workspace }}/build/mt32emu_qt/mt32emu-qt-*.rpm
+        path: build/mt32emu_qt/mt32emu-qt-*.rpm
         archive: false
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/munt-libmt32emu_2_8_3/.github/workflows/build-snapshots.yml 
new/munt-libmt32emu_2_8_5/.github/workflows/build-snapshots.yml
--- old/munt-libmt32emu_2_8_3/.github/workflows/build-snapshots.yml     
2026-06-06 15:58:54.000000000 +0200
+++ new/munt-libmt32emu_2_8_5/.github/workflows/build-snapshots.yml     
2026-11-03 13:34:11.000000000 +0100
@@ -1,10 +1,10 @@
-name: Build snapshots
+name: Build dev snapshots
 
 on:
   push:
-    branches: [ "master" ]
+    branches: [ "master", "ci" ]
   pull_request:
-    branches: [ "master" ]
+    branches: [ "master", "ci" ]
 
 jobs:
   build-snapshots:
@@ -19,7 +19,7 @@
         shell: bash
 
     steps:
-    - uses: actions/checkout@v4
+    - uses: actions/checkout@v6
 
     - name: Prepare build environment
       if: runner.os == 'Windows'
@@ -27,6 +27,7 @@
         export MINGW64_PATH="/c/msys64/mingw64/bin:/c/msys64/usr/bin"
         echo $MINGW64_PATH >> $GITHUB_PATH
         echo BUILD_PATH="PATH=$MINGW64_PATH:\$PATH" >> $GITHUB_ENV
+        echo CMAKE_CONFIG_FLAGS="-D CMAKE_PREFIX_PATH=C:/msys64/mingw64" >> 
$GITHUB_ENV
 
     - name: Install Ubuntu dependencies
       if: runner.os == 'Linux'
@@ -58,18 +59,20 @@
         -D CMAKE_BUILD_TYPE=Release
         -D BUILD_SNAPSHOTS=ON
         -D libmt32emu_PACKAGE_TYPE=Runtime
+        -D libmt32emu_TESTS_DETAILED:BOOL=ON
         -D mt32emu-qt_USE_JACK_DYNAMIC_LOADING=ON
         -D mt32emu-qt_USE_PULSEAUDIO_DYNAMIC_LOADING=OFF
+        ${{ env.CMAKE_CONFIG_FLAGS }}
 
     - name: Build
       run: ${{ env.BUILD_PATH }} cmake --build build
 
     - name: Test
-      working-directory: ${{ github.workspace }}/build
-      run: ctest -V
+      working-directory: build
+      run: ${{ env.BUILD_PATH }} ctest -V
 
     - name: Package munt monolith
-      working-directory: ${{ github.workspace }}/build
+      working-directory: build
       run: >
         cpack -G ${{ case(
           runner.os == 'Linux', 'DEB',
@@ -80,5 +83,5 @@
     - uses: actions/upload-artifact@v7
       name: Upload munt
       with:
-        path: ${{ github.workspace }}/build/munt-*.${{ case(runner.os == 
'Linux', 'deb', runner.os == 'macOS', 'tar.xz', 'zip') }}
+        path: build/munt-*.${{ case(runner.os == 'Linux', 'deb', runner.os == 
'macOS', 'tar.xz', 'zip') }}
         archive: false
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/munt-libmt32emu_2_8_3/.github/workflows/build-win32drv.yml 
new/munt-libmt32emu_2_8_5/.github/workflows/build-win32drv.yml
--- old/munt-libmt32emu_2_8_3/.github/workflows/build-win32drv.yml      
1970-01-01 01:00:00.000000000 +0100
+++ new/munt-libmt32emu_2_8_5/.github/workflows/build-win32drv.yml      
2026-11-03 13:34:11.000000000 +0100
@@ -0,0 +1,65 @@
+name: Build mt32emu_win32drv binaries
+
+on:
+  workflow_dispatch
+
+jobs:
+  build-mt32emu_win32drv:
+    runs-on: windows-latest
+
+    steps:
+    - uses: actions/checkout@v6
+
+    - name: Checkout libwdi sources
+      run: git clone --depth=1 --revision=v1.3.1 
https://github.com/pbatard/libwdi
+
+    - name: Create driver build script
+      run: >
+        echo
+        'cmake -S . -B %1 -G Ninja
+        -D BUILD_TESTING=OFF
+        -D CMAKE_BUILD_TYPE=Release
+        -D 
CMAKE_MSVC_RUNTIME_LIBRARY:STRING="MultiThreaded$<$<CONFIG:Debug>:Debug>"
+        -D libmt32emu_PACKAGE_TYPE=Runtime
+        -D munt_WITH_MT32EMU_QT:BOOL=OFF
+        -D munt_WITH_MT32EMU_SMF2WAV:BOOL=OFF
+        -D munt_WITH_MT32EMU_WIN32DRV:BOOL=ON
+        && cmake --build %1
+        && cmake --install %1 --prefix stage --component Runtime'
+        > build.cmd
+
+    - name: Assemble 32-bit driver and drvsetup
+      shell: cmd
+      run: >
+        "${{ vars.MSVC_ENV_INIT_SCRIPT_X86 }}" && build.cmd build_32
+        && cmake -S mt32emu_win32drv_setup/drvsetup -B build_drvsetup -G Ninja
+        -D CMAKE_BUILD_TYPE=Release
+        -D 
CMAKE_MSVC_RUNTIME_LIBRARY:STRING="MultiThreaded$<$<CONFIG:Debug>:Debug>"
+        && cmake --build build_drvsetup
+
+    - name: Assemble 64-bit driver and infinstall
+      shell: cmd
+      run: >
+        "${{ vars.MSVC_ENV_INIT_SCRIPT }}" && build.cmd build_64
+        && cmake -S mt32emu_win32drv_setup/infinstall -B build_infinstall -G 
Ninja
+        -D CMAKE_BUILD_TYPE=Release
+        -D 
CMAKE_MSVC_RUNTIME_LIBRARY:STRING="MultiThreaded$<$<CONFIG:Debug>:Debug>"
+        -D libwdi_SRC_PATH:PATH=libwdi
+        && cmake --build build_infinstall
+
+    - name: Package unsigned drivers and tools
+      shell: bash
+      run: |
+        cd stage
+        mv win32drv/* .
+        mv share/doc .
+        rm -rf win32drv share
+        mv ../build_drvsetup/drvsetup.exe .
+        mv ../build_infinstall/infinstall_x64.exe infinstall.exe
+
+    - uses: actions/upload-artifact@v7
+      name: Upload unsigned driver package
+      with:
+        path: stage
+        name: mt32emu_win32drv
+        archive: true
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/munt-libmt32emu_2_8_3/cmake/project_data.cmake 
new/munt-libmt32emu_2_8_5/cmake/project_data.cmake
--- old/munt-libmt32emu_2_8_3/cmake/project_data.cmake  2026-06-06 
15:58:54.000000000 +0200
+++ new/munt-libmt32emu_2_8_5/cmake/project_data.cmake  2026-11-03 
13:34:11.000000000 +0100
@@ -4,5 +4,5 @@
 
 set(munt_VERSION_MAJOR 2)
 set(munt_VERSION_MINOR 8)
-set(munt_VERSION_PATCH 2)
+set(munt_VERSION_PATCH 3)
 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_3/mt32emu/NEWS.txt 
new/munt-libmt32emu_2_8_5/mt32emu/NEWS.txt
--- old/munt-libmt32emu_2_8_3/mt32emu/NEWS.txt  2026-06-06 15:58:54.000000000 
+0200
+++ new/munt-libmt32emu_2_8_5/mt32emu/NEWS.txt  2026-11-03 13:34:11.000000000 
+0100
@@ -1,3 +1,17 @@
+2026-11-03:
+
+       2.8.5 released.
+
+       * Fixed a portability issue in unit tests. (#150)
+
+2026-11-02:
+
+       2.8.4 released.
+
+       * Fixed a heap buffer overflow in the MIDI stream parser that occurred 
when the client
+         submitted a fragmented SysEx message with the first fragment 
exceeding the maximum
+         supported size. (#149)
+
 2026-06-06:
 
        2.8.3 released.
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/munt-libmt32emu_2_8_3/mt32emu/cmake/project_data.cmake 
new/munt-libmt32emu_2_8_5/mt32emu/cmake/project_data.cmake
--- old/munt-libmt32emu_2_8_3/mt32emu/cmake/project_data.cmake  2026-06-06 
15:58:54.000000000 +0200
+++ new/munt-libmt32emu_2_8_5/mt32emu/cmake/project_data.cmake  2026-11-03 
13:34:11.000000000 +0100
@@ -4,5 +4,5 @@
 
 set(libmt32emu_VERSION_MAJOR 2)
 set(libmt32emu_VERSION_MINOR 8)
-set(libmt32emu_VERSION_PATCH 3)
+set(libmt32emu_VERSION_PATCH 5)
 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_3/mt32emu/src/MidiStreamParser.cpp 
new/munt-libmt32emu_2_8_5/mt32emu/src/MidiStreamParser.cpp
--- old/munt-libmt32emu_2_8_3/mt32emu/src/MidiStreamParser.cpp  2026-06-06 
15:58:54.000000000 +0200
+++ new/munt-libmt32emu_2_8_5/mt32emu/src/MidiStreamParser.cpp  2026-11-03 
13:34:11.000000000 +0100
@@ -129,9 +129,11 @@
 
 // We deal with SysEx messages below 512 bytes long in most cases. 
Nevertheless, it seems reasonable to support a possibility
 // to load bulk dumps using a single message. However, this is known to fail 
with a real device due to limited input buffer size.
+// Checks whether there is available space in the buffer, potentially 
reallocating it to the maximum capacity.
+// Returns true iff it's possible to add a new byte to the buffer.
 bool MidiStreamParserImpl::checkStreamBufferCapacity(const bool 
preserveContent) {
        if (streamBufferSize < streamBufferCapacity) return true;
-       if (streamBufferCapacity < MAX_STREAM_BUFFER_SIZE) {
+       if (streamBufferSize < MAX_STREAM_BUFFER_SIZE && streamBufferCapacity < 
MAX_STREAM_BUFFER_SIZE) {
                Bit8u *oldStreamBuffer = streamBuffer;
                streamBufferCapacity = MAX_STREAM_BUFFER_SIZE;
                streamBuffer = new Bit8u[streamBufferCapacity];
@@ -244,14 +246,16 @@
                }
        }
 
-       // Store incomplete SysEx message for further processing
+       // Store incomplete SysEx message for further processing if it fits 
into the allowed buffer size.
        streamBufferSize = sysexLength;
        if (checkStreamBufferCapacity(false)) {
-               memcpy(streamBuffer, stream, sysexLength);
+               // Better be paranoid about buffer overflows.
+               Bit32u bytesToCopy = sysexLength < streamBufferCapacity ? 
sysexLength : streamBufferCapacity;
+               memcpy(streamBuffer, stream, bytesToCopy);
        } else {
-               // Not enough buffer capacity, don't care about the real buffer 
content, just mark the first byte
+               // Not enough buffer capacity. We don't have to care about the 
real buffer content as the message is going to be discarded.
+               // We just mark the buffer as containing a SysEx, and 
streamBufferSize already indicates a buffer overrun.
                *streamBuffer = *stream;
-               streamBufferSize = streamBufferCapacity;
        }
        return sysexLength;
 }
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/munt-libmt32emu_2_8_3/mt32emu/src/test/MidiStreamParserTest.cpp 
new/munt-libmt32emu_2_8_5/mt32emu/src/test/MidiStreamParserTest.cpp
--- old/munt-libmt32emu_2_8_3/mt32emu/src/test/MidiStreamParserTest.cpp 
2026-06-06 15:58:54.000000000 +0200
+++ new/munt-libmt32emu_2_8_5/mt32emu/src/test/MidiStreamParserTest.cpp 
2026-11-03 13:34:11.000000000 +0100
@@ -254,6 +254,46 @@
        parser.checkRemainingEvents();
 }
 
+TEST_CASE("MidiStreamParser should handle fragmented SysEx messages of the 
maximum size") {
+       Bit8u *sysex = new Bit8u[MAX_STREAM_BUFFER_SIZE];
+       sysex[0] = 0xF0;
+       memset(sysex + 1, 0x3C, MAX_STREAM_BUFFER_SIZE - 2);
+       sysex[MAX_STREAM_BUFFER_SIZE - 1] = 0xF7;
+
+       const ParserEvent expected[] = { ParserEvent(sysex, 
MAX_STREAM_BUFFER_SIZE) };
+       TestMidiStreamParser parser(expected);
+       parser.parseStream(sysex, MAX_STREAM_BUFFER_SIZE - 1);
+       parser.parseStream(sysex + MAX_STREAM_BUFFER_SIZE - 1, 1);
+
+       parser.checkRemainingEvents();
+
+       delete[] sysex;
+}
+
+TEST_CASE("MidiStreamParser should ignore fragmented SysEx messages above the 
maximum size") {
+       const ParserEvent expected[] = { "streamBuffer overrun" };
+       TestMidiStreamParser parser(expected);
+
+       Bit8u *bigSysexFragment = new Bit8u[MAX_STREAM_BUFFER_SIZE + 1];
+       bigSysexFragment[0] = 0xF0;
+       memset(bigSysexFragment + 1, 0x3C, MAX_STREAM_BUFFER_SIZE);
+
+       SUBCASE("when the first fragment has the maximum size") {
+               parser.parseStream(bigSysexFragment, MAX_STREAM_BUFFER_SIZE);
+       }
+
+       SUBCASE("when the first fragment exceeds the maximum size") {
+               parser.parseStream(bigSysexFragment, MAX_STREAM_BUFFER_SIZE + 
1);
+       }
+
+       const Bit8u endOfSysex = 0xF7;
+       parser.parseStream(&endOfSysex, 1);
+
+       parser.checkRemainingEvents();
+
+       delete[] bigSysexFragment;
+}
+
 } // namespace Test
 
 } // namespace MT32Emu
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/munt-libmt32emu_2_8_3/mt32emu/src/test/ROMInfoTest.cpp 
new/munt-libmt32emu_2_8_5/mt32emu/src/test/ROMInfoTest.cpp
--- old/munt-libmt32emu_2_8_3/mt32emu/src/test/ROMInfoTest.cpp  2026-06-06 
15:58:54.000000000 +0200
+++ new/munt-libmt32emu_2_8_5/mt32emu/src/test/ROMInfoTest.cpp  2026-11-03 
13:34:11.000000000 +0100
@@ -364,6 +364,10 @@
        REQUIRE(result != NULL_PTR);
        CHECK(result->getSize() == 2 * dataSize);
        CHECK(result->getSHA1() == expectedSHA1);
+
+       const Bit8u *mergedData = result->getData();
+       delete result;
+       delete[] mergedData;
 }
 
 TEST_CASE("Failed merge of files with partial ROM images") {
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/munt-libmt32emu_2_8_3/mt32emu/src/test/ServiceTest.cpp 
new/munt-libmt32emu_2_8_5/mt32emu/src/test/ServiceTest.cpp
--- old/munt-libmt32emu_2_8_3/mt32emu/src/test/ServiceTest.cpp  2026-06-06 
15:58:54.000000000 +0200
+++ new/munt-libmt32emu_2_8_5/mt32emu/src/test/ServiceTest.cpp  2026-11-03 
13:34:11.000000000 +0100
@@ -15,6 +15,8 @@
  *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
  */
 
+#include <cstdarg>
+
 #include "../ROMInfo.h"
 #include "../Synth.h"
 
@@ -218,6 +220,13 @@
        return res;
 }
 
+static void emitDebugMessage(ReportHandler3 *emitter, const char *fmt, ...) {
+       va_list va;
+       va_start(va, fmt);
+       emitter->printDebug(fmt, va);
+       va_end(va);
+}
+
 #define MT32EMU_createSubcase(reportedEventType, factory) \
        SUBCASE(#reportedEventType) { \
                static const ReportedEvent e = factory; \
@@ -251,7 +260,7 @@
        ReportHandler3 *emitter = ensureNewContextReportHandler(service, rh);
        switch (reportedEvent->type) {
        case ReportedEvent::DEBUG_MESSAGE:
-               emitter->printDebug("Missing PCM ROM", 0);
+               emitDebugMessage(emitter, "Missing PCM ROM");
                break;
        case ReportedEvent::ERROR_CONTROL_ROM:
                emitter->onErrorControlROM();
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/munt-libmt32emu_2_8_3/mt32emu_qt/NEWS.txt 
new/munt-libmt32emu_2_8_5/mt32emu_qt/NEWS.txt
--- old/munt-libmt32emu_2_8_3/mt32emu_qt/NEWS.txt       2026-06-06 
15:58:54.000000000 +0200
+++ new/munt-libmt32emu_2_8_5/mt32emu_qt/NEWS.txt       2026-11-03 
13:34:11.000000000 +0100
@@ -1,3 +1,9 @@
+2026-11-02:
+
+       1.12.3 released.
+
+       * Updated mt32emu library to version 2.8.4.
+
 2026-06-06:
 
        1.12.2 released.
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/munt-libmt32emu_2_8_3/mt32emu_qt/cmake/project_data.cmake 
new/munt-libmt32emu_2_8_5/mt32emu_qt/cmake/project_data.cmake
--- old/munt-libmt32emu_2_8_3/mt32emu_qt/cmake/project_data.cmake       
2026-06-06 15:58:54.000000000 +0200
+++ new/munt-libmt32emu_2_8_5/mt32emu_qt/cmake/project_data.cmake       
2026-11-03 13:34:11.000000000 +0100
@@ -4,5 +4,5 @@
 
 set(mt32emu_qt_VERSION_MAJOR 1)
 set(mt32emu_qt_VERSION_MINOR 12)
-set(mt32emu_qt_VERSION_PATCH 2)
+set(mt32emu_qt_VERSION_PATCH 3)
 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_3/mt32emu_qt/src/Master.h 
new/munt-libmt32emu_2_8_5/mt32emu_qt/src/Master.h
--- old/munt-libmt32emu_2_8_3/mt32emu_qt/src/Master.h   2026-06-06 
15:58:54.000000000 +0200
+++ new/munt-libmt32emu_2_8_5/mt32emu_qt/src/Master.h   2026-11-03 
13:34:11.000000000 +0100
@@ -3,11 +3,10 @@
 
 #include <QtCore>
 
-#include "SynthRoute.h"
+#include "MidiSession.h"
 
 class AudioDriver;
 class MidiDriver;
-class MidiSession;
 
 class MidiPropertiesDialog;
 class QSystemTrayIcon;
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/munt-libmt32emu_2_8_3/mt32emu_smf2wav/cmake/project_data.cmake 
new/munt-libmt32emu_2_8_5/mt32emu_smf2wav/cmake/project_data.cmake
--- old/munt-libmt32emu_2_8_3/mt32emu_smf2wav/cmake/project_data.cmake  
2026-06-06 15:58:54.000000000 +0200
+++ new/munt-libmt32emu_2_8_5/mt32emu_smf2wav/cmake/project_data.cmake  
2026-11-03 13:34:11.000000000 +0100
@@ -4,5 +4,5 @@
 
 set(mt32emu_smf2wav_VERSION_MAJOR 1)
 set(mt32emu_smf2wav_VERSION_MINOR 9)
-set(mt32emu_smf2wav_VERSION_PATCH 3)
+set(mt32emu_smf2wav_VERSION_PATCH 4)
 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_3/mt32emu_win32drv/NEWS.txt 
new/munt-libmt32emu_2_8_5/mt32emu_win32drv/NEWS.txt
--- old/munt-libmt32emu_2_8_3/mt32emu_win32drv/NEWS.txt 2026-06-06 
15:58:54.000000000 +0200
+++ new/munt-libmt32emu_2_8_5/mt32emu_win32drv/NEWS.txt 2026-11-03 
13:34:11.000000000 +0100
@@ -1,3 +1,9 @@
+2026-11-02:
+
+       1.9.3 released.
+
+       * Updated mt32emu library to version 2.8.4.
+
 2026-06-06:
 
        1.9.2 released.
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/munt-libmt32emu_2_8_3/mt32emu_win32drv/cmake/project_data.cmake 
new/munt-libmt32emu_2_8_5/mt32emu_win32drv/cmake/project_data.cmake
--- old/munt-libmt32emu_2_8_3/mt32emu_win32drv/cmake/project_data.cmake 
2026-06-06 15:58:54.000000000 +0200
+++ new/munt-libmt32emu_2_8_5/mt32emu_win32drv/cmake/project_data.cmake 
2026-11-03 13:34:11.000000000 +0100
@@ -4,5 +4,5 @@
 
 set(mt32emu_win32drv_VERSION_MAJOR 1)
 set(mt32emu_win32drv_VERSION_MINOR 9)
-set(mt32emu_win32drv_VERSION_PATCH 2)
+set(mt32emu_win32drv_VERSION_PATCH 3)
 set(mt32emu_win32drv_VERSION 
"${mt32emu_win32drv_VERSION_MAJOR}.${mt32emu_win32drv_VERSION_MINOR}.${mt32emu_win32drv_VERSION_PATCH}")

Reply via email to