Hello community, here is the log from the commit of package fluidsynth for openSUSE:Factory checked in at 2020-07-17 20:45:02 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/fluidsynth (Old) and /work/SRC/openSUSE:Factory/.fluidsynth.new.3592 (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "fluidsynth" Fri Jul 17 20:45:02 2020 rev:52 rq:820949 version:2.1.4 Changes: -------- --- /work/SRC/openSUSE:Factory/fluidsynth/fluidsynth.changes 2020-06-02 14:33:30.770548281 +0200 +++ /work/SRC/openSUSE:Factory/.fluidsynth.new.3592/fluidsynth.changes 2020-07-17 20:45:30.484581940 +0200 @@ -1,0 +2,11 @@ +Mon Jul 13 16:03:45 UTC 2020 - Tom Mbrt <tom.m...@googlemail.com> + +- Update to version 2.1.4 + * fix an uninitialized memory access possibly triggering an FPE + trap + * fix several regressions introduced in 2.1.3: + * `fluid_synth_start()` failed for certain presets + * fix a NULL dereference in jack driver + * fix a stack-based overflow when creating the synth + +------------------------------------------------------------------- Old: ---- fluidsynth-2.1.3.tar.gz New: ---- fluidsynth-2.1.4.tar.gz ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ fluidsynth.spec ++++++ --- /var/tmp/diff_new_pack.qLOqup/_old 2020-07-17 20:45:32.348583926 +0200 +++ /var/tmp/diff_new_pack.qLOqup/_new 2020-07-17 20:45:32.352583930 +0200 @@ -25,7 +25,7 @@ %define sover 2 Name: fluidsynth -Version: 2.1.3 +Version: 2.1.4 Release: 0 Summary: A Real-Time Software Synthesizer That Uses Soundfont(tm) License: LGPL-2.1-or-later ++++++ fluidsynth-2.1.3.tar.gz -> fluidsynth-2.1.4.tar.gz ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/fluidsynth-2.1.3/.travis.yml new/fluidsynth-2.1.4/.travis.yml --- old/fluidsynth-2.1.3/.travis.yml 2020-05-23 15:31:48.000000000 +0200 +++ new/fluidsynth-2.1.4/.travis.yml 2020-07-12 12:55:32.000000000 +0200 @@ -25,7 +25,7 @@ env: - CMAKE_FLAGS="-Denable-profiling=1" - CMAKE_FLAGS="-Denable-floats=1 -Denable-profiling=1" - - CMAKE_FLAGS="-Denable-floats=0" + - CMAKE_FLAGS="-Denable-floats=1" - CMAKE_FLAGS="-Denable-trap-on-fpe=1" - CMAKE_FLAGS="-Denable-fpe-check=1" - CMAKE_FLAGS="-Denable-ipv6=0" diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/fluidsynth-2.1.3/CMakeLists.txt new/fluidsynth-2.1.4/CMakeLists.txt --- old/fluidsynth-2.1.3/CMakeLists.txt 2020-05-23 15:31:48.000000000 +0200 +++ new/fluidsynth-2.1.4/CMakeLists.txt 2020-07-12 12:55:32.000000000 +0200 @@ -29,7 +29,7 @@ # FluidSynth package version set ( FLUIDSYNTH_VERSION_MAJOR 2 ) set ( FLUIDSYNTH_VERSION_MINOR 1 ) -set ( FLUIDSYNTH_VERSION_MICRO 3 ) +set ( FLUIDSYNTH_VERSION_MICRO 4 ) set ( VERSION "${FLUIDSYNTH_VERSION_MAJOR}.${FLUIDSYNTH_VERSION_MINOR}.${FLUIDSYNTH_VERSION_MICRO}" ) set ( FLUIDSYNTH_VERSION "\"${VERSION}\"" ) @@ -44,7 +44,7 @@ # This is not exactly the same algorithm as the libtool one, but the results are the same. set ( LIB_VERSION_CURRENT 2 ) set ( LIB_VERSION_AGE 3 ) -set ( LIB_VERSION_REVISION 3 ) +set ( LIB_VERSION_REVISION 4 ) set ( LIB_VERSION_INFO "${LIB_VERSION_CURRENT}.${LIB_VERSION_AGE}.${LIB_VERSION_REVISION}" ) @@ -184,7 +184,7 @@ endif ( NOT APPLE AND NOT OS2 ) # define some warning flags - set ( CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wall -W -Wpointer-arith -Wcast-qual -Wstrict-prototypes -Wno-unused-parameter -Wdeclaration-after-statement -Werror=implicit-function-declaration" ) + set ( CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wall -W -Wpointer-arith -Wcast-qual -Wstrict-prototypes -Wno-unused-parameter -Wdeclaration-after-statement -Werror=implicit-function-declaration -Werror=incompatible-pointer-types" ) # prepend to build type specific flags, to allow users to override set ( CMAKE_C_FLAGS_DEBUG "-g ${CMAKE_C_FLAGS_DEBUG}" ) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/fluidsynth-2.1.3/doc/Doxyfile new/fluidsynth-2.1.4/doc/Doxyfile --- old/fluidsynth-2.1.3/doc/Doxyfile 2020-05-23 15:31:48.000000000 +0200 +++ new/fluidsynth-2.1.4/doc/Doxyfile 2020-07-12 12:55:32.000000000 +0200 @@ -5,7 +5,7 @@ #--------------------------------------------------------------------------- DOXYFILE_ENCODING = UTF-8 PROJECT_NAME = libfluidsynth -PROJECT_NUMBER = 2.1.3 +PROJECT_NUMBER = 2.1.4 OUTPUT_DIRECTORY = api CREATE_SUBDIRS = NO OUTPUT_LANGUAGE = English diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/fluidsynth-2.1.3/doc/fluidsynth-v20-devdoc.txt new/fluidsynth-2.1.4/doc/fluidsynth-v20-devdoc.txt --- old/fluidsynth-2.1.3/doc/fluidsynth-v20-devdoc.txt 2020-05-23 15:31:48.000000000 +0200 +++ new/fluidsynth-2.1.4/doc/fluidsynth-v20-devdoc.txt 2020-07-12 12:55:32.000000000 +0200 @@ -8,8 +8,8 @@ \author David Henningsson \author Tom Moebert \author Copyright © 2003-2020 Peter Hanappe, Conrad Berhörster, Antoine Schmitt, Pedro López-Cabanillas, Josh Green, David Henningsson, Tom Moebert -\version Revision 2.1.3 -\date 2020-05-23 +\version Revision 2.1.4 +\date 2020-07-05 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 http://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 http://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. @@ -21,6 +21,7 @@ - \ref Disclaimer - \ref Introduction +- \ref NewIn2_1_4 - \ref NewIn2_1_1 - \ref NewIn2_1_0 - \ref NewIn2_0_8 @@ -69,6 +70,11 @@ - FluidSynth is open source, in active development. For more details, take a look at http://www.fluidsynth.org + +\section NewIn2_1_4 What's new in 2.1.4? + +- a regression introduced in 2.1.3 broke fluid_synth_start() for DLS presets + \section NewIn2_1_1 What's new in 2.1.1? - requirements for explicit sequencer client unregistering have been relaxed: delete_fluid_sequencer() now correctly frees any registered sequencer clients (clients can still be explicitly unregistered) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/fluidsynth-2.1.3/src/drivers/fluid_jack.c new/fluidsynth-2.1.4/src/drivers/fluid_jack.c --- old/fluidsynth-2.1.3/src/drivers/fluid_jack.c 2020-05-23 15:31:48.000000000 +0200 +++ new/fluidsynth-2.1.4/src/drivers/fluid_jack.c 2020-07-12 12:55:32.000000000 +0200 @@ -83,7 +83,7 @@ jack_port_t **midi_port; // array of midi port handles fluid_midi_parser_t *parser; int autoconnect_inputs; - int autoconnect_is_outdated; + fluid_atomic_int_t autoconnect_is_outdated; }; static fluid_jack_client_t *new_fluid_jack_client(fluid_settings_t *settings, @@ -136,7 +136,7 @@ jack_free(midi_source_ports); } - midi_driver->autoconnect_is_outdated = FALSE; + fluid_atomic_int_set(&midi_driver->autoconnect_is_outdated, FALSE); } /* @@ -188,7 +188,8 @@ else { // do not free client_ref and do not goto error_recovery - // client_ref is being used by another audio or midi driver. Freeing it here will create a double free. + // client_ref is being used by another audio or midi driver. Freeing it here will lead to a double free. + client_ref = NULL; } fluid_mutex_unlock(last_client_mutex); /* -- unlock last_client */ @@ -357,7 +358,7 @@ if(dev->midi_port[i] == NULL) { - FLUID_LOG(FLUID_ERR, "Failed to create Jack MIDI port"); + FLUID_LOG(FLUID_ERR, "Failed to create Jack MIDI port '%s'", name); FLUID_FREE(dev->midi_port); dev->midi_port = NULL; return FLUID_FAILED; @@ -397,7 +398,8 @@ if(dev->output_ports[0] == NULL || dev->output_ports[1] == NULL) { - FLUID_LOG(FLUID_ERR, "Failed to create Jack audio port"); + FLUID_LOG(FLUID_ERR, "Failed to create Jack audio port '%s'", + (dev->output_ports[0] == NULL ? (dev->output_ports[1] == NULL ? "left & right" : "left") : "right")); goto error_recovery; } } @@ -706,7 +708,7 @@ if(midi_driver) { - if(midi_driver->autoconnect_is_outdated) + if(fluid_atomic_int_get(&midi_driver->autoconnect_is_outdated)) { fluid_jack_midi_autoconnect(client->client, midi_driver); } @@ -818,7 +820,7 @@ if(client_ref->midi_driver != NULL) { - client_ref->midi_driver->autoconnect_is_outdated = client_ref->midi_driver->autoconnect_inputs && is_registering != 0; + fluid_atomic_int_set(&client_ref->midi_driver->autoconnect_is_outdated, client_ref->midi_driver->autoconnect_inputs && is_registering != 0); } } @@ -863,13 +865,12 @@ } fluid_settings_getint(settings, "midi.autoconnect", &dev->autoconnect_inputs); - dev->autoconnect_is_outdated = dev->autoconnect_inputs; + fluid_atomic_int_set(&dev->autoconnect_is_outdated, dev->autoconnect_inputs); dev->client_ref = new_fluid_jack_client(settings, FALSE, dev); if(!dev->client_ref) { - FLUID_LOG(FLUID_PANIC, "Out of memory"); goto error_recovery; } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/fluidsynth-2.1.3/src/drivers/fluid_opensles.c new/fluidsynth-2.1.4/src/drivers/fluid_opensles.c --- old/fluidsynth-2.1.3/src/drivers/fluid_opensles.c 2020-05-23 15:31:48.000000000 +0200 +++ new/fluidsynth-2.1.4/src/drivers/fluid_opensles.c 2020-07-12 12:55:32.000000000 +0200 @@ -109,7 +109,7 @@ if(!dev->engine) { - FLUID_LOG(FLUID_ERR, "Failed to create the OpenSL ES engine, error code 0x%lx", result); + FLUID_LOG(FLUID_ERR, "Failed to create the OpenSL ES engine, error code 0x%lx", (unsigned long)result); goto error_recovery; } @@ -117,7 +117,7 @@ if(result != SL_RESULT_SUCCESS) { - FLUID_LOG(FLUID_ERR, "Failed to realize the OpenSL ES engine, error code 0x%lx", result); + FLUID_LOG(FLUID_ERR, "Failed to realize the OpenSL ES engine, error code 0x%lx", (unsigned long)result); goto error_recovery; } @@ -125,7 +125,7 @@ if(result != SL_RESULT_SUCCESS) { - FLUID_LOG(FLUID_ERR, "Failed to retrieve the OpenSL ES engine interface, error code 0x%lx", result); + FLUID_LOG(FLUID_ERR, "Failed to retrieve the OpenSL ES engine interface, error code 0x%lx", (unsigned long)result); goto error_recovery; } @@ -133,7 +133,7 @@ if(result != SL_RESULT_SUCCESS) { - FLUID_LOG(FLUID_ERR, "Failed to create the OpenSL ES output mix object, error code 0x%lx", result); + FLUID_LOG(FLUID_ERR, "Failed to create the OpenSL ES output mix object, error code 0x%lx", (unsigned long)result); goto error_recovery; } @@ -141,7 +141,7 @@ if(result != SL_RESULT_SUCCESS) { - FLUID_LOG(FLUID_ERR, "Failed to realize the OpenSL ES output mix object, error code 0x%lx", result); + FLUID_LOG(FLUID_ERR, "Failed to realize the OpenSL ES output mix object, error code 0x%lx", (unsigned long)result); goto error_recovery; } @@ -183,7 +183,7 @@ if(result != SL_RESULT_SUCCESS) { - FLUID_LOG(FLUID_ERR, "Failed to create the OpenSL ES audio player object, error code 0x%lx", result); + FLUID_LOG(FLUID_ERR, "Failed to create the OpenSL ES audio player object, error code 0x%lx", (unsigned long)result); goto error_recovery; } @@ -191,7 +191,7 @@ if(result != SL_RESULT_SUCCESS) { - FLUID_LOG(FLUID_ERR, "Failed to realize the OpenSL ES audio player object, error code 0x%lx", result); + FLUID_LOG(FLUID_ERR, "Failed to realize the OpenSL ES audio player object, error code 0x%lx", (unsigned long)result); goto error_recovery; } @@ -200,7 +200,7 @@ if(result != SL_RESULT_SUCCESS) { - FLUID_LOG(FLUID_ERR, "Failed to retrieve the OpenSL ES audio player interface, error code 0x%lx", result); + FLUID_LOG(FLUID_ERR, "Failed to retrieve the OpenSL ES audio player interface, error code 0x%lx", (unsigned long)result); goto error_recovery; } @@ -209,7 +209,7 @@ if(result != SL_RESULT_SUCCESS) { - FLUID_LOG(FLUID_ERR, "Failed to retrieve the OpenSL ES buffer queue interface, error code 0x%lx", result); + FLUID_LOG(FLUID_ERR, "Failed to retrieve the OpenSL ES buffer queue interface, error code 0x%lx", (unsigned long)result); goto error_recovery; } @@ -232,7 +232,7 @@ if(result != SL_RESULT_SUCCESS) { - FLUID_LOG(FLUID_ERR, "Failed to register the opensles_callback, error code 0x%lx", result); + FLUID_LOG(FLUID_ERR, "Failed to register the opensles_callback, error code 0x%lx", (unsigned long)result); goto error_recovery; } @@ -247,7 +247,7 @@ if(result != SL_RESULT_SUCCESS) { - FLUID_LOG(FLUID_ERR, "Failed to add a buffer to the queue, error code 0x%lx", result); + FLUID_LOG(FLUID_ERR, "Failed to add a buffer to the queue, error code 0x%lx", (unsigned long)result); goto error_recovery; } @@ -255,7 +255,7 @@ if(result != SL_RESULT_SUCCESS) { - FLUID_LOG(FLUID_ERR, "Failed to set OpenSL ES audio player callback events, error code 0x%lx", result); + FLUID_LOG(FLUID_ERR, "Failed to set OpenSL ES audio player callback events, error code 0x%lx", (unsigned long)result); goto error_recovery; } @@ -263,7 +263,7 @@ if(result != SL_RESULT_SUCCESS) { - FLUID_LOG(FLUID_ERR, "Failed to set OpenSL ES audio player play state to playing, error code 0x%lx", result); + FLUID_LOG(FLUID_ERR, "Failed to set OpenSL ES audio player play state to playing, error code 0x%lx", (unsigned long)result); goto error_recovery; } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/fluidsynth-2.1.3/src/midi/fluid_midi.c new/fluidsynth-2.1.4/src/midi/fluid_midi.c --- old/fluidsynth-2.1.3/src/midi/fluid_midi.c 2020-05-23 15:31:48.000000000 +0200 +++ new/fluidsynth-2.1.4/src/midi/fluid_midi.c 2020-07-12 12:55:32.000000000 +0200 @@ -174,7 +174,7 @@ return NULL; } - FLUID_LOG(FLUID_DBG, "File load: Allocating %lu bytes", buflen); + FLUID_LOG(FLUID_DBG, "File load: Allocating %lu bytes", (unsigned long)buflen); buffer = FLUID_MALLOC(buflen); if(buffer == NULL) @@ -187,8 +187,8 @@ if(n != buflen) { - FLUID_LOG(FLUID_ERR, "Only read %lu bytes; expected %lu", n, - buflen); + FLUID_LOG(FLUID_ERR, "Only read %lu bytes; expected %lu", (unsigned long)n, + (unsigned long)buflen); FLUID_FREE(buffer); return NULL; }; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/fluidsynth-2.1.3/src/synth/fluid_synth.c new/fluidsynth-2.1.4/src/synth/fluid_synth.c --- old/fluidsynth-2.1.3/src/synth/fluid_synth.c 2020-05-23 15:31:48.000000000 +0200 +++ new/fluidsynth-2.1.4/src/synth/fluid_synth.c 2020-07-12 12:55:32.000000000 +0200 @@ -609,7 +609,7 @@ char *important_channels; int i, nbuf, prio_level = 0; int with_ladspa = 0; - fluid_real_t sample_rate_min, sample_rate_max; + double sample_rate_min, sample_rate_max; /* initialize all the conversion tables and other stuff */ if(fluid_atomic_int_compare_and_exchange(&fluid_synth_initialized, 0, 1)) @@ -789,7 +789,7 @@ /* In an overflow situation, a new voice takes about 50 spaces in the queue! */ synth->eventhandler = new_fluid_rvoice_eventhandler(synth->polyphony * 64, synth->polyphony, nbuf, synth->effects_channels, synth->effects_groups, - sample_rate_max, synth->sample_rate, + (fluid_real_t)sample_rate_max, synth->sample_rate, synth->cores - 1, prio_level); if(synth->eventhandler == NULL) @@ -4527,14 +4527,13 @@ for(i = 0; i < synth->polyphony; i++) { fluid_voice_t *existing_voice = synth->voice[i]; - int existing_excl_class = fluid_voice_gen_value(existing_voice, GEN_EXCLUSIVECLASS); /* If voice is playing, on the same channel, has same exclusive * class and is not part of the same noteon event (voice group), then kill it */ if(fluid_voice_is_playing(existing_voice) && fluid_voice_get_channel(existing_voice) == fluid_voice_get_channel(new_voice) - && existing_excl_class == excl_class + && fluid_voice_gen_value(existing_voice, GEN_EXCLUSIVECLASS) == excl_class && fluid_voice_get_id(existing_voice) != fluid_voice_get_id(new_voice)) { fluid_voice_kill_excl(existing_voice); @@ -6344,15 +6343,14 @@ fluid_synth_start(fluid_synth_t *synth, unsigned int id, fluid_preset_t *preset, int audio_chan, int chan, int key, int vel) { - int result; - fluid_defsfont_t *defsfont; + int result, dynamic_samples; fluid_return_val_if_fail(preset != NULL, FLUID_FAILED); fluid_return_val_if_fail(key >= 0 && key <= 127, FLUID_FAILED); fluid_return_val_if_fail(vel >= 1 && vel <= 127, FLUID_FAILED); FLUID_API_ENTRY_CHAN(FLUID_FAILED); - defsfont = fluid_sfont_get_data(preset->sfont); - if(defsfont->dynamic_samples) + fluid_settings_getint(fluid_synth_get_settings(synth), "synth.dynamic-sample-loading", &dynamic_samples); + if(dynamic_samples) { // The preset might not be currently used, thus its sample data may not be loaded. // This guard is to avoid a NULL deref in rvoice_write().