From 1dd4aab0b4d3e14ef93ddb3470d4c386f48cda6b Mon Sep 17 00:00:00 2001 From: Robin Gareus Date: Tue, 27 Jun 2017 20:12:03 +0200 Subject: Update fluidsynth Fix potential crashes in case fluid-synth runs into an OOM error, and address a const-cast compiler warning. Switch to track github repo (instead of sf.net git) --- libs/fluidsynth/src/fluid_midi.c | 13 ++++++++++--- libs/fluidsynth/src/fluid_settings.c | 2 +- libs/fluidsynth/src/fluid_settings.h | 2 +- libs/fluidsynth/src/fluid_synth.c | 6 ++++++ 4 files changed, 18 insertions(+), 5 deletions(-) (limited to 'libs/fluidsynth/src') diff --git a/libs/fluidsynth/src/fluid_midi.c b/libs/fluidsynth/src/fluid_midi.c index 171952fcae..fc58d839ef 100644 --- a/libs/fluidsynth/src/fluid_midi.c +++ b/libs/fluidsynth/src/fluid_midi.c @@ -372,10 +372,17 @@ fluid_midi_file_read_track(fluid_midi_file *mf, fluid_player_t *player, int num) } /* Skip remaining track data, if any */ - if (mf->trackpos < mf->tracklen) - fluid_midi_file_skip(mf, mf->tracklen - mf->trackpos); + if (mf->trackpos < mf->tracklen) { + if (fluid_midi_file_skip(mf, mf->tracklen - mf->trackpos) != FLUID_OK) { + delete_fluid_track(track); + return FLUID_FAILED; + } + } - fluid_player_add_track(player, track); + if (fluid_player_add_track(player, track) != FLUID_OK) { + delete_fluid_track(track); + return FLUID_FAILED; + } } else { found_track = 0; diff --git a/libs/fluidsynth/src/fluid_settings.c b/libs/fluidsynth/src/fluid_settings.c index 56de8c71d7..181484ecc3 100644 --- a/libs/fluidsynth/src/fluid_settings.c +++ b/libs/fluidsynth/src/fluid_settings.c @@ -443,7 +443,7 @@ fluid_settings_set(fluid_settings_t* settings, const char *name, void* value) /** returns 1 if the value has been registered correctly, 0 otherwise */ int -fluid_settings_register_str(fluid_settings_t* settings, char* name, char* def, int hints, +fluid_settings_register_str(fluid_settings_t* settings, const char* name, const char* def, int hints, fluid_str_update_t fun, void* data) { fluid_setting_node_t *node; diff --git a/libs/fluidsynth/src/fluid_settings.h b/libs/fluidsynth/src/fluid_settings.h index 0eb1f97286..244f0b457b 100644 --- a/libs/fluidsynth/src/fluid_settings.h +++ b/libs/fluidsynth/src/fluid_settings.h @@ -37,7 +37,7 @@ typedef int (*fluid_int_update_t)(void* data, const char* name, int value); /** returns 0 if the value has been registered correctly, non-zero otherwise */ -int fluid_settings_register_str(fluid_settings_t* settings, char* name, char* def, int hints, +int fluid_settings_register_str(fluid_settings_t* settings, const char* name, const char* def, int hints, fluid_str_update_t fun, void* data); /** returns 0 if the value has been registered correctly, non-zero diff --git a/libs/fluidsynth/src/fluid_synth.c b/libs/fluidsynth/src/fluid_synth.c index a12260c7b0..8a30e250ba 100644 --- a/libs/fluidsynth/src/fluid_synth.c +++ b/libs/fluidsynth/src/fluid_synth.c @@ -2544,6 +2544,12 @@ fluid_synth_process(fluid_synth_t* synth, int len, int nin, float** in, int i; left = FLUID_ARRAY(float*, nout/2); right = FLUID_ARRAY(float*, nout/2); + if ((left == NULL) || (right == NULL)) { + FLUID_LOG(FLUID_ERR, "Out of memory."); + FLUID_FREE(left); + FLUID_FREE(right); + return FLUID_FAILED; + } for(i=0; i