diff options
author | Robin Gareus <robin@gareus.org> | 2017-06-27 20:12:03 +0200 |
---|---|---|
committer | Robin Gareus <robin@gareus.org> | 2017-06-27 20:12:46 +0200 |
commit | 1dd4aab0b4d3e14ef93ddb3470d4c386f48cda6b (patch) | |
tree | f0006417f0db48b8694ea306faba70044dfb3ee3 /libs | |
parent | 0650e0d3fd80da266045d3553fc3465fc40f5afd (diff) |
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)
Diffstat (limited to 'libs')
-rw-r--r-- | libs/fluidsynth/src/fluid_midi.c | 13 | ||||
-rw-r--r-- | libs/fluidsynth/src/fluid_settings.c | 2 | ||||
-rw-r--r-- | libs/fluidsynth/src/fluid_settings.h | 2 | ||||
-rw-r--r-- | libs/fluidsynth/src/fluid_synth.c | 6 |
4 files changed, 18 insertions, 5 deletions
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<nout/2; i++) { left[i] = out[2*i]; right[i] = out[2*i+1]; |