Skip to content

Crash on certain hosts due to initial preset value being set to -1 #18

Closed
@yamadapc

Description

@yamadapc

This is fine on most iOS hosts, but for AUM (https://apps.apple.com/us/app/aum-audio-mixer/id1055636344) which is a highly used host for iOS, the fact the initial program is set to -1 causes the plugin to crash.

The reason is that -1 is not a valid program index and JUCE AudioUnit code is not handling -1 as an input. See:

  • juce::JuceAudioUnitv3::FactoryPresets::getAtIndex

What AUM seems to do it:

  • Create the plugin filter; here the RNBO::JuceAudioProcessor constructor sets the current program to -1
  • Get the current preset by calling juce::JuceAudioUnitv3::getCurrentPreset
AUAudioUnitPreset* getCurrentPreset() const
{
    return factoryPresets.getAtIndex (getAudioProcessor().getCurrentProgram());
}
  • At this point, we're calling factoryPresets.getAtIndex (-1); see the implementation of this method does no lower bounds checking
AUAudioUnitPreset* getAtIndex (int index) const
{
     std::lock_guard<std::mutex> lock (mutex);

     if (index < (int) [presets.get() count])
          return [presets.get() objectAtIndex: (unsigned int) index];

     return nullptr;
}
  • The plugin crashes due to objectAtIndex trying to access index - 1 of that array

The fix could be to for RNBO::JuceAudioProcessor's _currentPresetIdx field to be initialised to 0 or a different value. I can verify setting the program to 0 (as well as patching JUCE bounds checking code above to consider lower bounds) fixes crashes in AUM for my iOS plugin.

All the best

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions