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 © 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)