Script 'mail_helper' called by obssrc
Hello community,

here is the log from the commit of package fluidsynth for openSUSE:Factory 
checked in at 2025-07-20 15:28:44
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/fluidsynth (Old)
 and      /work/SRC/openSUSE:Factory/.fluidsynth.new.8875 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "fluidsynth"

Sun Jul 20 15:28:44 2025 rev:80 rq:1294151 version:2.4.7

Changes:
--------
--- /work/SRC/openSUSE:Factory/fluidsynth/fluidsynth.changes    2025-05-12 
16:49:29.066192666 +0200
+++ /work/SRC/openSUSE:Factory/.fluidsynth.new.8875/fluidsynth.changes  
2025-07-20 15:29:41.161593920 +0200
@@ -1,0 +2,9 @@
+Wed Jul 16 17:01:35 UTC 2025 - Martin Hauke <mar...@gmx.de>
+
+- Update to version 2.4.7
+  * All previous versions of fluidsynth have incorrectly rejected
+    Soundfont files with unknown INFO subchunks.
+  * Fix incorrect GS DT1 SysEx checksum validation.
+  * Fix a NULL pointer dereference during legato mono playing.
+
+-------------------------------------------------------------------

Old:
----
  fluidsynth-2.4.6.tar.gz

New:
----
  fluidsynth-2.4.7.tar.gz

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

Other differences:
------------------
++++++ fluidsynth.spec ++++++
--- /var/tmp/diff_new_pack.eAoibD/_old  2025-07-20 15:29:41.833621730 +0200
+++ /var/tmp/diff_new_pack.eAoibD/_new  2025-07-20 15:29:41.837621896 +0200
@@ -18,7 +18,7 @@
 
 %define sover   3
 Name:           fluidsynth
-Version:        2.4.6
+Version:        2.4.7
 Release:        0
 Summary:        A Real-Time Software Synthesizer That Uses Soundfont(tm)
 License:        LGPL-2.1-or-later

++++++ fluidsynth-2.4.6.tar.gz -> fluidsynth-2.4.7.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/fluidsynth-2.4.6/.azure/azure-pipelines-android.yml 
new/fluidsynth-2.4.7/.azure/azure-pipelines-android.yml
--- old/fluidsynth-2.4.6/.azure/azure-pipelines-android.yml     2025-05-04 
13:47:50.000000000 +0200
+++ new/fluidsynth-2.4.7/.azure/azure-pipelines-android.yml     2025-07-14 
18:13:38.000000000 +0200
@@ -189,7 +189,7 @@
 
     - task: Cache@2
       inputs:
-        key: '$(ARCH) | "$(NDK)" | $(DEV)/*.tar.*'
+        key: '$(ARCH) | "$(NDK)" | $(DEV)/*.tar.* | ver1'
         path: '$(PREFIX)'
         cacheHitVar: 'CACHE_RESTORED'
       displayName: 'Cache fluidsynth dependency libraries'
@@ -229,7 +229,8 @@
         
LIBPATH2=$(NDK_TOOLCHAIN)/sysroot/usr/lib/$(ARCH)-linux-android$(ANDROID_TARGET_ABI)/$(ANDROID_API)
         
LIBPATH3=$(NDK_TOOLCHAIN)/sysroot/usr/lib/$(ARCH)-linux-android$(ANDROID_TARGET_ABI)
 
-        export LDFLAGS="-pie -Wl,-rpath-link=${LIBPATH1} -L${LIBPATH1} 
-Wl,-rpath-link=${LIBPATH2} -L${LIBPATH2} -Wl,-rpath-link=${LIBPATH3} 
-L${LIBPATH3} -Wl,-rpath-link=${LIBPATH0} -L${LIBPATH0}"
+        # Add max. page size to linker flag, see 
https://developer.android.com/guide/practices/page-sizes
+        export LDFLAGS="-pie -Wl,-z,max-page-size=16384 
-Wl,-rpath-link=${LIBPATH1} -L${LIBPATH1} -Wl,-rpath-link=${LIBPATH2} 
-L${LIBPATH2} -Wl,-rpath-link=${LIBPATH3} -L${LIBPATH3} 
-Wl,-rpath-link=${LIBPATH0} -L${LIBPATH0}"
         echo "##vso[task.setvariable variable=LDFLAGS]$LDFLAGS"
 
         # Tell configure what tools to use.
@@ -460,7 +461,7 @@
         workDir: '$(System.DefaultWorkingDirectory)'
         sourceDir: '.'
         condition: succeeded()
-        cmakeArgs: '-Denable-opensles=1 -Denable-floats=1 -Denable-oboe=1 
-Denable-dbus=0 -Denable-oss=0'
+        cmakeArgs: '-Denable-opensles=1 -Denable-floats=1 -Denable-oboe=1 
-Denable-dbus=0 -Denable-oss=0 -Denable-openmp=0'
         installCommand: ''
 
     - script: |
@@ -530,6 +531,12 @@
       displayName: 'Verify all libs exist'
       workingDirectory: '$(PREFIX)/lib'
 
+    - script: |
+        set -ex
+        chmod +x contrib/check_elf_alignment.sh
+        contrib/check_elf_alignment.sh "$(PREFIX)/lib"
+      displayName: 'Assert 16K page alignment'
+
     - task: PublishBuildArtifacts@1
       displayName: 'Publishing Artefacts for Android API$(ANDROID_API) 
$(ANDROID_ABI_CMAKE)'
       inputs:
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/fluidsynth-2.4.6/CMakeLists.txt 
new/fluidsynth-2.4.7/CMakeLists.txt
--- old/fluidsynth-2.4.6/CMakeLists.txt 2025-05-04 13:47:50.000000000 +0200
+++ new/fluidsynth-2.4.7/CMakeLists.txt 2025-07-14 18:13:38.000000000 +0200
@@ -47,7 +47,7 @@
 # FluidSynth package version
 set ( FLUIDSYNTH_VERSION_MAJOR 2 )
 set ( FLUIDSYNTH_VERSION_MINOR 4 )
-set ( FLUIDSYNTH_VERSION_MICRO 6 )
+set ( FLUIDSYNTH_VERSION_MICRO 7 )
 set ( VERSION 
"${FLUIDSYNTH_VERSION_MAJOR}.${FLUIDSYNTH_VERSION_MINOR}.${FLUIDSYNTH_VERSION_MICRO}"
 )
 set ( FLUIDSYNTH_VERSION ${VERSION} )
 
@@ -62,7 +62,7 @@
 # This is not exactly the same algorithm as the libtool one, but the results 
are the same.
 set ( LIB_VERSION_CURRENT 3 )
 set ( LIB_VERSION_AGE 3 )
-set ( LIB_VERSION_REVISION 6 )
+set ( LIB_VERSION_REVISION 7 )
 set ( LIB_VERSION_INFO
       "${LIB_VERSION_CURRENT}.${LIB_VERSION_AGE}.${LIB_VERSION_REVISION}" )
 
@@ -347,7 +347,10 @@
   # MinGW compiler (a Windows GCC port)
   if ( MINGW )
     set ( MINGW32 1 )
-    add_compile_options ( -mms-bitfields )
+    check_c_compiler_flag( "-mms-bitfields" COMPILER_SUPPORTS_MMS_BITFIELDS )
+    if ( COMPILER_SUPPORTS_MMS_BITFIELDS )
+      add_compile_options ( -mms-bitfields )
+    endif ()
     # mman-win32
     if ( HAVE_SYS_MMAN_H )
       set ( WINDOWS_LIBS "${WINDOWS_LIBS};mman" )
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/fluidsynth-2.4.6/contrib/check_elf_alignment.sh 
new/fluidsynth-2.4.7/contrib/check_elf_alignment.sh
--- old/fluidsynth-2.4.6/contrib/check_elf_alignment.sh 1970-01-01 
01:00:00.000000000 +0100
+++ new/fluidsynth-2.4.7/contrib/check_elf_alignment.sh 2025-07-14 
18:13:38.000000000 +0200
@@ -0,0 +1,119 @@
+#!/bin/bash
+
+# source: https://developer.android.com/guide/practices/page-sizes
+# 
https://cs.android.com/android/platform/superproject/main/+/main:system/extras/tools/check_elf_alignment.sh
+#
+progname="${0##*/}"
+progname="${progname%.sh}"
+
+# usage: check_elf_alignment.sh [path to *.so files|path to *.apk]
+
+cleanup_trap() {
+  if [ -n "${tmp}" -a -d "${tmp}" ]; then
+    rm -rf ${tmp}
+  fi
+  exit $1
+}
+
+usage() {
+  echo "Host side script to check the ELF alignment of shared libraries."
+  echo "Shared libraries are reported ALIGNED when their ELF regions are"
+  echo "16 KB or 64 KB aligned. Otherwise they are reported as UNALIGNED."
+  echo
+  echo "Usage: ${progname} [input-path|input-APK|input-APEX]"
+}
+
+if [ ${#} -ne 1 ]; then
+  usage
+  exit
+fi
+
+case ${1} in
+  --help | -h | -\?)
+    usage
+    exit
+    ;;
+
+  *)
+    dir="${1}"
+    ;;
+esac
+
+if ! [ -f "${dir}" -o -d "${dir}" ]; then
+  echo "Invalid file: ${dir}" >&2
+  exit 1
+fi
+
+if [[ "${dir}" == *.apk ]]; then
+  trap 'cleanup_trap' EXIT
+
+  echo
+  echo "Recursively analyzing $dir"
+  echo
+
+  if { zipalign --help 2>&1 | grep -q "\-P <pagesize_kb>"; }; then
+    echo "=== APK zip-alignment ==="
+    zipalign -v -c -P 16 4 "${dir}" | egrep 
'lib/arm64-v8a|lib/x86_64|Verification'
+    echo "========================="
+  else
+    echo "NOTICE: Zip alignment check requires build-tools version 35.0.0-rc3 
or higher."
+    echo "  You can install the latest build-tools by running the below 
command"
+    echo "  and updating your \$PATH:"
+    echo
+    echo "    sdkmanager \"build-tools;35.0.0-rc3\""
+  fi
+
+  dir_filename=$(basename "${dir}")
+  tmp=$(mktemp -d -t "${dir_filename%.apk}_out_XXXXX")
+  unzip "${dir}" lib/* -d "${tmp}" >/dev/null 2>&1
+  dir="${tmp}"
+fi
+
+if [[ "${dir}" == *.apex ]]; then
+  trap 'cleanup_trap' EXIT
+
+  echo
+  echo "Recursively analyzing $dir"
+  echo
+
+  dir_filename=$(basename "${dir}")
+  tmp=$(mktemp -d -t "${dir_filename%.apex}_out_XXXXX")
+  deapexer extract "${dir}" "${tmp}" || { echo "Failed to deapex." && exit 1; }
+  dir="${tmp}"
+fi
+
+RED="\e[31m"
+GREEN="\e[32m"
+ENDCOLOR="\e[0m"
+
+unaligned_libs=()
+
+echo
+echo "=== ELF alignment ==="
+
+matches="$(find "${dir}" -type f)"
+IFS=$'\n'
+for match in $matches; do
+  # We could recursively call this script or rewrite it to though.
+  [[ "${match}" == *".apk" ]] && echo "WARNING: doesn't recursively inspect 
.apk file: ${match}"
+  [[ "${match}" == *".apex" ]] && echo "WARNING: doesn't recursively inspect 
.apex file: ${match}"
+
+  [[ $(file "${match}") == *"ELF"* ]] || continue
+
+  res="$(objdump -p "${match}" | grep LOAD | awk '{ print $NF }' | head -1)"
+  if [[ $res =~ 2\*\*(1[4-9]|[2-9][0-9]|[1-9][0-9]{2,}) ]]; then
+    echo -e "${match}: ${GREEN}ALIGNED${ENDCOLOR} ($res)"
+  else
+    echo -e "${match}: ${RED}UNALIGNED${ENDCOLOR} ($res)"
+    unaligned_libs+=("${match}")
+  fi
+done
+
+if [ ${#unaligned_libs[@]} -gt 0 ]; then
+  echo -e "${RED}Found ${#unaligned_libs[@]} unaligned libs (only 
arm64-v8a/x86_64 libs need to be aligned).${ENDCOLOR}"
+  exit -1
+elif [ -n "${dir_filename}" ]; then
+  echo -e "ELF Verification Successful"
+  exit 0
+fi
+echo "====================="
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/fluidsynth-2.4.6/doc/fluidsynth-v20-devdoc.txt 
new/fluidsynth-2.4.7/doc/fluidsynth-v20-devdoc.txt
--- old/fluidsynth-2.4.6/doc/fluidsynth-v20-devdoc.txt  2025-05-04 
13:47:50.000000000 +0200
+++ new/fluidsynth-2.4.7/doc/fluidsynth-v20-devdoc.txt  2025-07-14 
18:13:38.000000000 +0200
@@ -8,8 +8,8 @@
 \author David Henningsson
 \author Tom Moebert
 \author Copyright &copy; 2003-2025 Peter Hanappe, Conrad Berhörster, Antoine 
Schmitt, Pedro López-Cabanillas, Josh Green, David Henningsson, Tom Moebert
-\version Revision 2.4.6
-\date 2025-05-03
+\version Revision 2.4.7
+\date 2025-06-29
 
 All the source code examples in this document are in the public domain; you 
can use them as you please. This document is licensed under the Creative 
Commons Attribution-Share Alike 3.0 Unported License. To view a copy of this 
license, visit https://creativecommons.org/licenses/by-sa/3.0/ . The FluidSynth 
library is distributed under the GNU Lesser General Public License. A copy of 
the GNU Lesser General Public License is contained in the FluidSynth package; 
if not, visit https://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt or write 
to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, 
MA 02110-1301 USA.
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/fluidsynth-2.4.6/doc/recent_changes.txt 
new/fluidsynth-2.4.7/doc/recent_changes.txt
--- old/fluidsynth-2.4.6/doc/recent_changes.txt 2025-05-04 13:47:50.000000000 
+0200
+++ new/fluidsynth-2.4.7/doc/recent_changes.txt 2025-07-14 18:13:38.000000000 
+0200
@@ -1,6 +1,9 @@
 /*!
 
 \page RecentChanges Recent Changes
+\section NewIn2_4_5 What's new in 2.4.5?
+- In order to use the sdl3 audio driver, the downstream application is 
responsible for calling <code>SDL_Init()</code> and <code>SDL_Quit()</code>, 
just like it was practice for the sdl2 audio driver. Fluidsynth may raise a 
warning if this isn't done, see \ref CreatingAudioDriver
+
 \section NewIn2_4_3 What's new in 2.4.3?
 - synth.note-cut has been introduced
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/fluidsynth-2.4.6/doc/usage/audio_driver.txt 
new/fluidsynth-2.4.7/doc/usage/audio_driver.txt
--- old/fluidsynth-2.4.6/doc/usage/audio_driver.txt     2025-05-04 
13:47:50.000000000 +0200
+++ new/fluidsynth-2.4.7/doc/usage/audio_driver.txt     2025-07-14 
18:13:38.000000000 +0200
@@ -29,7 +29,7 @@
   Windows Mobile 2003 for ARMv5, Windows 98 SE, Windows NT 4.0, Windows XP
   and later)
 - file: Driver to output audio to a file
-- sdl2*: Simple DirectMedia Layer (Linux, Windows, Mac OS X, iOS, Android,
+- sdl3*: Simple DirectMedia Layer (Linux, Windows, Mac OS X, iOS, Android,
   FreeBSD, Haiku, etc.)
 - pipewire**: PipeWire (Linux)
 
@@ -74,11 +74,12 @@
 For a full list of available <strong>audio driver settings</strong>, please
 refer to the \setting{audio} documentation.
 
-<strong>*Note:</strong> In order to use sdl2 as audio driver, the application
+<strong>*Note:</strong> In order to use sdl3 as audio driver, the application
 is responsible for initializing SDL (e.g. with SDL_Init()). This must be done
 <strong>before</strong> the first call to <code>new_fluid_settings()</code>!
 Also make sure to call SDL_Quit() after all fluidsynth instances have been
-destroyed.
+destroyed. A warning may be printed if sdl3 is available, but no such call
+has been made.
 
 <strong>**Note:</strong> In order to use pipeiwre as audio driver, the 
application
 is responsible for initializing PipeWire (e.g. with pw_init()). This must be 
done
@@ -86,4 +87,6 @@
 Also make sure to call pw_deinit() after all fluidsynth instances have been
 destroyed.
 
+Warnings raised by audio drivers during initialization via 
new_fluid_settings() can
+be suppressed by disabling those audio drivers with 
fluid_audio_driver_register().
 */
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/fluidsynth-2.4.6/src/CMakeLists.txt 
new/fluidsynth-2.4.7/src/CMakeLists.txt
--- old/fluidsynth-2.4.6/src/CMakeLists.txt     2025-05-04 13:47:50.000000000 
+0200
+++ new/fluidsynth-2.4.7/src/CMakeLists.txt     2025-07-14 18:13:38.000000000 
+0200
@@ -186,9 +186,9 @@
     bindings/fluid_ladspa.h
 )
 if ( CMAKE_CXX_COMPILER_ID STREQUAL "Clang" OR CMAKE_CXX_COMPILER_ID STREQUAL 
"GNU" )
-  set_source_files_properties(rvoice/fluid_iir_filter.cpp PROPERTIES 
COMPILE_FLAGS "-fno-math-errno -ffast-math")
+  set_source_files_properties(rvoice/fluid_iir_filter_impl.cpp PROPERTIES 
COMPILE_FLAGS "-fno-math-errno -ffast-math")
 elseif ( CMAKE_CXX_COMPILER_ID STREQUAL "MSVC" )
-  set_source_files_properties(rvoice/fluid_iir_filter.cpp PROPERTIES 
COMPILE_FLAGS "/fp:fast")
+  set_source_files_properties(rvoice/fluid_iir_filter_impl.cpp PROPERTIES 
COMPILE_FLAGS "/fp:fast")
 endif ( )
 
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/fluidsynth-2.4.6/src/rvoice/fluid_iir_filter_impl.cpp 
new/fluidsynth-2.4.7/src/rvoice/fluid_iir_filter_impl.cpp
--- old/fluidsynth-2.4.6/src/rvoice/fluid_iir_filter_impl.cpp   2025-05-04 
13:47:50.000000000 +0200
+++ new/fluidsynth-2.4.7/src/rvoice/fluid_iir_filter_impl.cpp   2025-07-14 
18:13:38.000000000 +0200
@@ -160,7 +160,7 @@
 {
     // FLUID_IIR_Q_LINEAR may switch the filter off by setting Q==0
     // Due to the linear smoothing, last_q may not exactly become zero.
-    if (iir_filter->type == FLUID_IIR_DISABLED || 
FLUID_FABS(iir_filter->last_q) < Q_MIN)
+    if (iir_filter->type == FLUID_IIR_DISABLED || iir_filter->last_q < Q_MIN)
     {
         return;
     }
@@ -189,17 +189,6 @@
 
         /* filter (implement the voice filter according to SoundFont standard) 
*/
 
-        /* Check for denormal number (too close to zero). */
-        if (FLUID_FABS(dsp_hist1) < 1e-20f)
-        {
-            dsp_hist1 = 0.0f; /* FIXME JMG - Is this even needed? */
-        }
-
-        /* Two versions of the filter loop. One, while the filter is
-         * changing towards its new setting. The other, if the filter
-         * doesn't change.
-         */
-
         unsigned int dsp_i;
         for (dsp_i = 0; dsp_i < count; dsp_i++)
         {
@@ -209,6 +198,14 @@
             dsp_hist2 = dsp_hist1;
             dsp_hist1 = dsp_centernode;
 
+            FLUID_ASSERT(dsp_hist1 == dsp_hist1);
+            FLUID_ASSERT(sample == sample);
+            FLUID_ASSERT(dsp_a1 == dsp_a1);
+            FLUID_ASSERT(dsp_a2 == dsp_a2);
+            FLUID_ASSERT(dsp_b02 == dsp_b02);
+            FLUID_ASSERT(dsp_b1 == dsp_b1);
+            FLUID_ASSERT(q >= Q_MIN);
+
             /* Alternatively, it could be implemented in Transposed Direct 
Form II */
             // fluid_real_t dsp_input = dsp_buf[dsp_i];
             // dsp_buf[dsp_i] = dsp_b02 * dsp_input + dsp_hist1;
@@ -236,21 +233,39 @@
                 {
                     --q_incr_count;
                     q += q_incr;
+                    if(q < Q_MIN)
+                    {
+                        
LOG_FILTER("!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!");
+                        LOG_FILTER("!!!OOPS!!! limited Q to its minimum value, 
was: %f", q);
+                        
LOG_FILTER("!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!");
+                        q_incr_count = 0;
+                        q = Q_MIN;
+                    }
                 }
-                
-                LOG_FILTER("last_fres: %.2f Hz  |  target_fres: %.2f Hz  |---| 
 last_q: %.4f  |  target_q: %.4f", iir_filter->last_fres, 
iir_filter->target_fres, iir_filter->last_q, iir_filter->target_q);
+
+                LOG_FILTER("fres: %.2f Hz  | target_fres: %.2f Hz | fres_incr: 
%f\t| fres_incr_count: %d\t|---| q: %f\t| target_q: %f\t| q_incr: %f\t| 
q_incr_count: %d", fres, iir_filter->target_fres, fres_incr, fres_incr_count, 
q, iir_filter->target_q, q_incr, q_incr_count);
                 
                 fluid_iir_filter_calculate_coefficients<IIR_COEFF_T, 
GAIN_NORM, TYPE>(fres, q, iir_filter->sincos_table, &dsp_a1, &dsp_a2, &dsp_b02, 
&dsp_b1);
             }
         }
 
-        iir_filter->hist1 = dsp_hist1;
-        iir_filter->hist2 = dsp_hist2;
         iir_filter->a1 = dsp_a1;
         iir_filter->a2 = dsp_a2;
         iir_filter->b02= dsp_b02;
         iir_filter->b1 = dsp_b1;
 
+        /* Check for denormal number (too close to zero). */
+        if (FLUID_FABS(dsp_hist1) < 1e-20f)
+        {
+            dsp_hist1 = 0.0f;
+        }
+        if (FLUID_FABS(dsp_hist2) < 1e-20f)
+        {
+            dsp_hist2 = 0.0f;
+        }
+        iir_filter->hist1 = dsp_hist1;
+        iir_filter->hist2 = dsp_hist2;
+
         iir_filter->last_fres = fres;
         iir_filter->fres_incr_count = fres_incr_count;
         iir_filter->last_q = q;
@@ -338,7 +353,7 @@
         
         iir_filter->fres_incr_count = 0;
         iir_filter->last_fres = fres;
-        iir_filter->filter_startup = (FLUID_FABS(iir_filter->last_q) < Q_MIN); 
// filter coefficients will not be initialized when Q is small
+        iir_filter->filter_startup = (iir_filter->last_q < Q_MIN); // filter 
coefficients will not be initialized when Q is small
     }
     else if(FLUID_FABS(fres_diff) > (fluid_real_t)CENTS_STEP) // only smooth 
out fres when difference is "significant"
     {
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/fluidsynth-2.4.6/src/sfloader/fluid_sffile.c 
new/fluidsynth-2.4.7/src/sfloader/fluid_sffile.c
--- old/fluidsynth-2.4.6/src/sfloader/fluid_sffile.c    2025-05-04 
13:47:50.000000000 +0200
+++ new/fluidsynth-2.4.7/src/sfloader/fluid_sffile.c    2025-07-14 
18:13:38.000000000 +0200
@@ -713,13 +713,27 @@
             sf->romver.minor = ver;
             FLUID_LOG(FLUID_DBG, "ROM Version: %hu.%hu", sf->version.major, 
sf->version.minor);
         }
-        else if(chunkid(chunk.id) != UNKN_ID)
+        else
         {
-            if((chunk.id != ICMT_FCC && chunk.size > 256) || (chunk.size > 
65536) || (chunk.size % 2))
+            if(chunkid(chunk.id) != UNKN_ID)
             {
-                FLUID_LOG(FLUID_ERR, "INFO sub chunk %.4s has invalid chunk 
size of %d bytes",
-                          (char*)&chunk.id, chunk.size);
-                return FALSE;
+                if((chunk.id != ICMT_FCC && chunk.size > 256) || (chunk.size > 
65536) || (chunk.size % 2))
+                {
+                    FLUID_LOG(FLUID_ERR, "INFO sub chunk %.4s has invalid 
chunk size of %d bytes",
+                              (char*)&chunk.id, chunk.size);
+                    return FALSE;
+                }
+            }
+            else
+            {
+                /* SF 2.04 specification, section 10.2:
+                 * 10.2 Unknown chunks
+                 * within the INFO-list chunk should simply be ignored.
+                 * Other unknown chunks or sub-chunks are illegal and should be
+                 * treated as structural errors.*/
+                unsigned char *p = (unsigned char *)&chunk.id;
+                FLUID_LOG(FLUID_WARN, "Ignoring unknown chunk ID '%c%c%c%c' in 
INFO chunk",
+                          p[0], p[1], p[2], p[3]);
             }
 
             /* alloc for chunk fcc and da chunk */
@@ -743,11 +757,6 @@
             /* force terminate info item */
             item.chr[chunk.size] = '\0';
         }
-        else
-        {
-            FLUID_LOG(FLUID_ERR, "Invalid chunk id in INFO chunk");
-            return FALSE;
-        }
 
         size -= chunk.size;
     }
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/fluidsynth-2.4.6/src/synth/fluid_synth.c 
new/fluidsynth-2.4.7/src/synth/fluid_synth.c
--- old/fluidsynth-2.4.6/src/synth/fluid_synth.c        2025-05-04 
13:47:50.000000000 +0200
+++ new/fluidsynth-2.4.7/src/synth/fluid_synth.c        2025-07-14 
18:13:38.000000000 +0200
@@ -2471,7 +2471,8 @@
         checksum += data[i];
     }
     checksum = 0x80 - (checksum & 0x7F);
-    if (checksum != data[len - 1])
+    // An intermediate checksum of 0x80 must be treated as zero! #1578
+    if ((checksum & 0x7F) != data[len - 1])
     {
         FLUID_LOG(FLUID_INFO, "SysEx DT1: dropping message on addr 0x%x due to 
incorrect checksum 0x%x. Correct checksum: 0x%x", addr, (int)data[len - 1], 
checksum);
         return FLUID_FAILED;
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/fluidsynth-2.4.6/src/synth/fluid_synth_monopoly.c 
new/fluidsynth-2.4.7/src/synth/fluid_synth_monopoly.c
--- old/fluidsynth-2.4.6/src/synth/fluid_synth_monopoly.c       2025-05-04 
13:47:50.000000000 +0200
+++ new/fluidsynth-2.4.7/src/synth/fluid_synth_monopoly.c       2025-07-14 
18:13:38.000000000 +0200
@@ -410,7 +410,7 @@
                 fluid_channel_breath_msb(channel))
         {
             /* legato playing detection */
-            if(channel->mode  & FLUID_CHANNEL_LEGATO_PLAYING)
+            if (channel->mode & FLUID_CHANNEL_LEGATO_PLAYING && 
channel->preset != NULL)
             {
                 /* the list contains others notes */
                 if(i_prev >= 0)

Reply via email to