diff options
author | Giuseppe D'Angelo <giuseppe.dangelo@kdab.com> | 2020-10-05 10:33:21 +0200 |
---|---|---|
committer | Giuseppe D'Angelo <giuseppe.dangelo@kdab.com> | 2020-10-06 07:37:28 +0000 |
commit | 45a0c68c8c0b373152f4aec511bc150f431ad9e3 (patch) | |
tree | 11436a8870d666b1c41d2466ec24d0b247a2a505 | |
parent | 227fa93c27d7c3a3e1749749ee2b9eafdb397a7f (diff) |
xdgdesktopportal: properly fix a dangling pointer
The previous fix didn't actually work, as it kept a reference
into a container which could have been muted by the time the
reference was going to be used.
Use an index instead.
Amends 32c09ea5b0f529418eece63de5c3b2c206f62896.
Change-Id: Ib855b4a663c281467e46536b98a0ce2b961f19ee
Pick-to: 5.15
Task-number: QTBUG-87143
Reviewed-by: Michael Weghorn <m.weghorn@posteo.de>
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
-rw-r--r-- | src/plugins/platformthemes/xdgdesktopportal/qxdgdesktopportalfiledialog.cpp | 11 |
1 files changed, 5 insertions, 6 deletions
diff --git a/src/plugins/platformthemes/xdgdesktopportal/qxdgdesktopportalfiledialog.cpp b/src/plugins/platformthemes/xdgdesktopportal/qxdgdesktopportalfiledialog.cpp index ae2532e69e..cf3c2c9e9b 100644 --- a/src/plugins/platformthemes/xdgdesktopportal/qxdgdesktopportalfiledialog.cpp +++ b/src/plugins/platformthemes/xdgdesktopportal/qxdgdesktopportalfiledialog.cpp @@ -210,7 +210,7 @@ void QXdgDesktopPortalFileDialog::openPortal() qDBusRegisterMetaType<FilterList>(); FilterList filterList; - Filter* selectedFilter = nullptr; + auto selectedFilterIndex = filterList.size() - 1; d->userVisibleToNameFilter.clear(); @@ -236,7 +236,7 @@ void QXdgDesktopPortalFileDialog::openPortal() filterList << filter; if (!d->selectedMimeTypeFilter.isEmpty() && d->selectedMimeTypeFilter == mimeTypefilter) - selectedFilter = &filterList.last(); + selectedFilterIndex = filterList.size() - 1; } } else if (!d->nameFilters.isEmpty()) { for (const QString &nameFilter : d->nameFilters) { @@ -265,7 +265,7 @@ void QXdgDesktopPortalFileDialog::openPortal() d->userVisibleToNameFilter.insert(userVisibleName, nameFilter); if (!d->selectedNameFilter.isEmpty() && d->selectedNameFilter == nameFilter) - selectedFilter = &filterList.last(); + selectedFilterIndex = filterList.size() - 1; } } } @@ -273,9 +273,8 @@ void QXdgDesktopPortalFileDialog::openPortal() if (!filterList.isEmpty()) options.insert(QLatin1String("filters"), QVariant::fromValue(filterList)); - if (selectedFilter) { - options.insert(QLatin1String("current_filter"), QVariant::fromValue(*selectedFilter)); - } + if (selectedFilterIndex != -1) + options.insert(QLatin1String("current_filter"), QVariant::fromValue(filterList[selectedFilterIndex])); options.insert(QLatin1String("handle_token"), QStringLiteral("qt%1").arg(QRandomGenerator::global()->generate())); |