Skip to content

Commit

Permalink
Fix crash with KDE's platformtheme plugin
Browse files Browse the repository at this point in the history
Require QPA plugins to match qt major.minor rules

Pick-to: 6.8
Change-Id: I78d40bb22d41b71db83c6a89c8ac8e319ec51d43
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
  • Loading branch information
Allan Sandfeld Jensen committed Sep 29, 2024
1 parent aeeb118 commit dfe71d1
Showing 1 changed file with 8 additions and 2 deletions.
10 changes: 8 additions & 2 deletions src/corelib/plugin/qfactoryloader.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -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];
Expand All @@ -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
}
Expand Down

0 comments on commit dfe71d1

Please sign in to comment.