summaryrefslogtreecommitdiff
path: root/libs/fluidsynth/src
diff options
context:
space:
mode:
authorRobin Gareus <robin@gareus.org>2017-06-27 20:12:03 +0200
committerRobin Gareus <robin@gareus.org>2017-06-27 20:12:46 +0200
commit1dd4aab0b4d3e14ef93ddb3470d4c386f48cda6b (patch)
treef0006417f0db48b8694ea306faba70044dfb3ee3 /libs/fluidsynth/src
parent0650e0d3fd80da266045d3553fc3465fc40f5afd (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/fluidsynth/src')
-rw-r--r--libs/fluidsynth/src/fluid_midi.c13
-rw-r--r--libs/fluidsynth/src/fluid_settings.c2
-rw-r--r--libs/fluidsynth/src/fluid_settings.h2
-rw-r--r--libs/fluidsynth/src/fluid_synth.c6
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];