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>
This commit is contained in:
Giuseppe D'Angelo 2020-10-05 10:33:21 +02:00
parent 227fa93c27
commit 45a0c68c8c

View File

@ -210,7 +210,7 @@ void QXdgDesktopPortalFileDialog::openPortal()
qDBusRegisterMetaType<FilterList>(); qDBusRegisterMetaType<FilterList>();
FilterList filterList; FilterList filterList;
Filter* selectedFilter = nullptr; auto selectedFilterIndex = filterList.size() - 1;
d->userVisibleToNameFilter.clear(); d->userVisibleToNameFilter.clear();
@ -236,7 +236,7 @@ void QXdgDesktopPortalFileDialog::openPortal()
filterList << filter; filterList << filter;
if (!d->selectedMimeTypeFilter.isEmpty() && d->selectedMimeTypeFilter == mimeTypefilter) if (!d->selectedMimeTypeFilter.isEmpty() && d->selectedMimeTypeFilter == mimeTypefilter)
selectedFilter = &filterList.last(); selectedFilterIndex = filterList.size() - 1;
} }
} else if (!d->nameFilters.isEmpty()) { } else if (!d->nameFilters.isEmpty()) {
for (const QString &nameFilter : d->nameFilters) { for (const QString &nameFilter : d->nameFilters) {
@ -265,7 +265,7 @@ void QXdgDesktopPortalFileDialog::openPortal()
d->userVisibleToNameFilter.insert(userVisibleName, nameFilter); d->userVisibleToNameFilter.insert(userVisibleName, nameFilter);
if (!d->selectedNameFilter.isEmpty() && d->selectedNameFilter == 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()) if (!filterList.isEmpty())
options.insert(QLatin1String("filters"), QVariant::fromValue(filterList)); options.insert(QLatin1String("filters"), QVariant::fromValue(filterList));
if (selectedFilter) { if (selectedFilterIndex != -1)
options.insert(QLatin1String("current_filter"), QVariant::fromValue(*selectedFilter)); options.insert(QLatin1String("current_filter"), QVariant::fromValue(filterList[selectedFilterIndex]));
}
options.insert(QLatin1String("handle_token"), QStringLiteral("qt%1").arg(QRandomGenerator::global()->generate())); options.insert(QLatin1String("handle_token"), QStringLiteral("qt%1").arg(QRandomGenerator::global()->generate()));