PLUGINS: Fix crash when no plugins are available

This commit is contained in:
Cameron Cawley 2019-12-01 21:26:42 +00:00 committed by Filippos Karapetis
parent a0c15492b4
commit e2d91258b7
2 changed files with 22 additions and 17 deletions

View File

@ -181,15 +181,17 @@ PluginList ELFPluginProvider::getPlugins() {
PluginList pl = FilePluginProvider::getPlugins();
#if defined(UNCACHED_PLUGINS) && !defined(ELF_NO_MEM_MANAGER)
// This static downcast is safe because all of the plugins must
// be ELF plugins
for (PluginList::iterator p = pl.begin(); p != pl.end(); ++p) {
(static_cast<ELFPlugin *>(*p))->trackSize();
}
if (!pl.empty()) {
// This static downcast is safe because all of the plugins must
// be ELF plugins
for (PluginList::iterator p = pl.begin(); p != pl.end(); ++p) {
(static_cast<ELFPlugin *>(*p))->trackSize();
}
// The Memory Manager should now allocate space based on the information
// it collected
ELFMemMan.allocateHeap();
// The Memory Manager should now allocate space based on the information
// it collected
ELFMemMan.allocateHeap();
}
#endif
return pl;

View File

@ -641,15 +641,18 @@ const Plugin *EngineManager::findPlugin(const Common::String &engineId) const {
}
// We failed to find it using the engine ID. Scan the list of plugins
PluginMan.loadFirstPlugin();
do {
plugin = findLoadedPlugin(engineId);
if (plugin) {
// Update with new plugin file name
PluginMan.updateConfigWithFileName(engineId);
return plugin;
}
} while (PluginMan.loadNextPlugin());
const PluginList &plugins = getPlugins();
if (!plugins.empty()) {
PluginMan.loadFirstPlugin();
do {
plugin = findLoadedPlugin(engineId);
if (plugin) {
// Update with new plugin file name
PluginMan.updateConfigWithFileName(engineId);
return plugin;
}
} while (PluginMan.loadNextPlugin());
}
return 0;
}