aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorhjk <hjk@qt.io>2020-08-13 13:03:17 +0200
committerEike Ziller <eike.ziller@qt.io>2020-08-25 09:48:03 +0000
commitfff3b4183349f84f9f68dc7712fdd73c6b2111e7 (patch)
tree098d35df68ed59f87d4ddcc2fb4a46e5c9064cb2
parent5cece408de8c9141c36acf921db8afcc5f0a5376 (diff)
QmlDesigner: Fix UB in QmlPreviewPlugin::getPreviewPlugin()v4.13.0
Each call to PluginManager::plugins() creates a new QVector object, iterators are only comparable for iterators from the same vector. It worked in practice because the underlying storage was the same here as the QVector objects were only shallow copies. Change-Id: I2e276535942bd949acf91e12873c7bdf9d5c34d6 Reviewed-by: Eike Ziller <eike.ziller@qt.io>
-rw-r--r--src/plugins/qmldesigner/qmlpreviewplugin/qmlpreviewplugin.cpp8
1 files changed, 5 insertions, 3 deletions
diff --git a/src/plugins/qmldesigner/qmlpreviewplugin/qmlpreviewplugin.cpp b/src/plugins/qmldesigner/qmlpreviewplugin/qmlpreviewplugin.cpp
index aa6b0e8565..ac0f30118d 100644
--- a/src/plugins/qmldesigner/qmlpreviewplugin/qmlpreviewplugin.cpp
+++ b/src/plugins/qmldesigner/qmlpreviewplugin/qmlpreviewplugin.cpp
@@ -158,13 +158,15 @@ void QmlPreviewPlugin::setLanguageLocale(const QString &locale)
QObject *QmlPreviewPlugin::getPreviewPlugin()
{
- auto pluginIt = std::find_if(ExtensionSystem::PluginManager::plugins().begin(),
- ExtensionSystem::PluginManager::plugins().end(),
+ const QVector<ExtensionSystem::PluginSpec *> specs = ExtensionSystem::PluginManager::plugins();
+
+ auto pluginIt = std::find_if(specs.begin(),
+ specs.end(),
[](const ExtensionSystem::PluginSpec *p) {
return p->name() == "QmlPreview";
});
- if (pluginIt != ExtensionSystem::PluginManager::plugins().constEnd())
+ if (pluginIt != specs.end())
return (*pluginIt)->plugin();
return nullptr;