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.
This commit is contained in:
Robin Gareus
2020-11-21 22:28:48 +01:00
parent a529122249
commit 767d5f93ba
4 changed files with 8 additions and 8 deletions

View File

@@ -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));
}

View File

@@ -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);
}

View File

@@ -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);
}

View File

@@ -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)));
}