diff options
author | Chris Robinson <[email protected]> | 2014-01-01 07:33:48 -0800 |
---|---|---|
committer | Chris Robinson <[email protected]> | 2014-01-01 07:33:48 -0800 |
commit | 7d94e9c52fc7023e7ef7ca036de02b6131ecc376 (patch) | |
tree | 53be273463e8e2621ab04899c7fb03932a24378a | |
parent | 0a5a08c0fb942e4db407f6eccc86c091dc7c362f (diff) |
Don't allow soundfonts with existing presets in alLoadSoundfontSOFT
-rw-r--r-- | Alc/midi/sf2load.c | 32 | ||||
-rw-r--r-- | OpenAL32/alMidi.c | 5 |
2 files changed, 16 insertions, 21 deletions
diff --git a/Alc/midi/sf2load.c b/Alc/midi/sf2load.c index 1733bab2..43f960c6 100644 --- a/Alc/midi/sf2load.c +++ b/Alc/midi/sf2load.c @@ -1322,35 +1322,25 @@ ALboolean loadSf2(Reader *stream, ALsoundfont *soundfont, ALCcontext *context) GenModList_Destruct(&gzone); IDList_Destruct(&fsids); } + if(pids.ids_size > 0) { - ALsizei count = pids.ids_size; - ALsfpreset **presets; + ALsfpreset **presets = NULL; + ALCdevice *device = context->Device; - if(count == 0) - presets = NULL; - else - { - ALCdevice *device = context->Device; - - presets = calloc(count, sizeof(presets[0])); - if(!presets) - SET_ERROR_AND_GOTO(context, AL_OUT_OF_MEMORY, error); + presets = calloc(pids.ids_size, sizeof(presets[0])); + if(!presets) + SET_ERROR_AND_GOTO(context, AL_OUT_OF_MEMORY, error); - for(i = 0;i < count;i++) - { - if(!(presets[i]=LookupPreset(device, pids.ids[i]))) - SET_ERROR_AND_GOTO(context, AL_INVALID_VALUE, error); - } + for(i = 0;i < pids.ids_size;i++) + { + if(!(presets[i]=LookupPreset(device, pids.ids[i]))) + SET_ERROR_AND_GOTO(context, AL_INVALID_VALUE, error); } - for(i = 0;i < count;i++) + for(i = 0;i < pids.ids_size;i++) IncrementRef(&presets[i]->ref); - presets = ExchangePtr((XchgPtr*)&soundfont->Presets, presets); - count = ExchangeInt(&soundfont->NumPresets, count); - for(i = 0;i < count;i++) - DecrementRef(&presets[i]->ref); free(presets); } diff --git a/OpenAL32/alMidi.c b/OpenAL32/alMidi.c index 17384bcf..3bf0acc4 100644 --- a/OpenAL32/alMidi.c +++ b/OpenAL32/alMidi.c @@ -86,6 +86,11 @@ AL_API void AL_APIENTRY alLoadSoundfontSOFT(ALuint id, size_t(*cb)(ALvoid*,size_ WriteUnlock(&sfont->Lock); SET_ERROR_AND_GOTO(context, AL_INVALID_OPERATION, done); } + if(sfont->NumPresets > 0) + { + WriteUnlock(&sfont->Lock); + SET_ERROR_AND_GOTO(context, AL_INVALID_OPERATION, done); + } reader.cb = cb; reader.ptr = user; |