From 767d5f93ba879cf542340ade57940217df10c022 Mon Sep 17 00:00:00 2001 From: Robin Gareus Date: Sat, 21 Nov 2020 22:28:48 +0100 Subject: [PATCH] Fix segfault when plugin insantiation fails *PluginInfo::load() eventually calls `plugin->set_info()` which depends on a valid PluginPtr. The method needs to return early if `plugin` is unset or null. --- libs/ardour/audio_unit.cc | 1 + libs/ardour/lxvst_plugin.cc | 7 +++---- libs/ardour/mac_vst_plugin.cc | 7 +++---- libs/ardour/windows_vst_plugin.cc | 1 + 4 files changed, 8 insertions(+), 8 deletions(-) diff --git a/libs/ardour/audio_unit.cc b/libs/ardour/audio_unit.cc index d7f16f21e2..4afcb21f7b 100644 --- a/libs/ardour/audio_unit.cc +++ b/libs/ardour/audio_unit.cc @@ -2624,6 +2624,7 @@ AUPluginInfo::load (Session& session) if (!comp->IsValid()) { error << ("AudioUnit: not a valid Component") << endmsg; + return PluginPtr (); } else { plugin.reset (new AUPlugin (session.engine(), session, comp)); } diff --git a/libs/ardour/lxvst_plugin.cc b/libs/ardour/lxvst_plugin.cc index 432bff37c2..297f33be6b 100644 --- a/libs/ardour/lxvst_plugin.cc +++ b/libs/ardour/lxvst_plugin.cc @@ -85,12 +85,11 @@ LXVSTPluginInfo::load (Session& session) if (handle == NULL) { error << string_compose(_("LXVST: cannot load module from \"%1\""), path) << endmsg; - } - else { + return PluginPtr ((Plugin*) 0); + } else { plugin.reset (new LXVSTPlugin (session.engine(), session, handle, PBD::atoi(unique_id))); } - } - else { + } else { error << _("You asked ardour to not use any LXVST plugins") << endmsg; return PluginPtr ((Plugin*) 0); } diff --git a/libs/ardour/mac_vst_plugin.cc b/libs/ardour/mac_vst_plugin.cc index 9057f324b1..fdaa77b391 100644 --- a/libs/ardour/mac_vst_plugin.cc +++ b/libs/ardour/mac_vst_plugin.cc @@ -90,12 +90,11 @@ MacVSTPluginInfo::load (Session& session) if (handle == NULL) { error << string_compose (_("MacVST: cannot load module from \"%1\""), path) << endmsg; - } - else { + return PluginPtr ((Plugin*) 0); + } else { plugin.reset (new MacVSTPlugin (session.engine (), session, handle, PBD::atoi (unique_id))); } - } - else { + } else { error << _("You asked ardour to not use any MacVST plugins") << endmsg; return PluginPtr ((Plugin*) 0); } diff --git a/libs/ardour/windows_vst_plugin.cc b/libs/ardour/windows_vst_plugin.cc index 3d1e06c72e..4244ce87be 100644 --- a/libs/ardour/windows_vst_plugin.cc +++ b/libs/ardour/windows_vst_plugin.cc @@ -85,6 +85,7 @@ WindowsVSTPluginInfo::load (Session& session) if (!handle) { error << string_compose(_("VST: cannot load module from \"%1\""), path) << endmsg; + return PluginPtr ((Plugin*) 0); } else { plugin.reset (new WindowsVSTPlugin (session.engine(), session, handle, PBD::atoi(unique_id))); }