Fix crash with KDE's platformtheme plugin

Require QPA plugins to match qt major.minor rules

Change-Id: I78d40bb22d41b71db83c6a89c8ac8e319ec51d43
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
(cherry picked from commit dfe71d1d23746223b7bd047108850d07f8caa6e5)
Reviewed-by: Qt Cherry-pick Bot <cherrypick_bot@qt-project.org>
This commit is contained in:
Allan Sandfeld Jensen 2024-09-27 13:56:26 +02:00 committed by Qt Cherry-pick Bot
parent 7df3f20b91
commit 4b5b6451f4

View File

@ -348,6 +348,14 @@ inline void QFactoryLoaderPrivate::updateSinglePath(const QString &path)
if (!metaDataOk)
continue;
static constexpr qint64 QtVersionNoPatch = QT_VERSION_CHECK(QT_VERSION_MAJOR, QT_VERSION_MINOR, 0);
int thisVersion = library->metaData.value(QtPluginMetaDataKeys::QtVersion).toInteger();
if (iid.startsWith(QStringLiteral("org.qt-project.Qt.QPA"))) {
// QPA plugins must match Qt Major.Minor
if (thisVersion != QtVersionNoPatch)
continue;
}
int keyUsageCount = 0;
for (const QString &key : std::as_const(keys)) {
QLibraryPrivate *&keyMapEntry = keyMap[key];
@ -363,9 +371,7 @@ inline void QFactoryLoaderPrivate::updateSinglePath(const QString &path)
// If the existing library was built with a future Qt version,
// whereas the one we're considering has a Qt version that fits
// better, we prioritize the better match.
static constexpr qint64 QtVersionNoPatch = QT_VERSION_CHECK(QT_VERSION_MAJOR, QT_VERSION_MINOR, 0);
int existingVersion = existingLibrary->metaData.value(QtPluginMetaDataKeys::QtVersion).toInteger();
int thisVersion = library->metaData.value(QtPluginMetaDataKeys::QtVersion).toInteger();
if (!(existingVersion > QtVersionNoPatch && thisVersion <= QtVersionNoPatch))
continue; // Existing version is a better match
}