FdoSecrets: skip entries in recycle bin when searching (fix #7933)

This commit is contained in:
Aetf
2022-05-06 17:47:34 -04:00
committed by Jonathan White
parent aa97bd5213
commit a4c5997050
5 changed files with 49 additions and 10 deletions

View File

@@ -276,7 +276,12 @@ namespace FdoSecrets
EntrySearcher(caseSensitive, skipProtected).search(terms, m_exposedGroup, forceSearch);
items.reserve(foundEntries.size());
for (const auto& entry : foundEntries) {
items << m_entryToItem.value(entry);
const auto item = m_entryToItem.value(entry);
// it's possible that we don't have a corresponding item for the entry
// this can happen when the recycle bin is below the exposed group.
if (item) {
items << item;
}
}
return {};
}
@@ -458,7 +463,7 @@ namespace FdoSecrets
});
// Another possibility is the group being moved to recycle bin.
connect(m_exposedGroup.data(), &Group::modified, this, [this]() {
if (inRecycleBin(m_exposedGroup->parentGroup())) {
if (inRecycleBin(m_exposedGroup)) {
// reset the exposed group to none
FdoSecrets::settings()->setExposedGroup(m_backend->database().data(), {});
}
@@ -677,11 +682,7 @@ namespace FdoSecrets
bool Collection::inRecycleBin(Group* group) const
{
Q_ASSERT(m_backend);
if (!group) {
// the root group's parent is nullptr, we treat it as not in recycle bin.
return false;
}
Q_ASSERT(group);
if (!m_backend->database()->metadata()) {
return false;

View File

@@ -107,6 +107,9 @@ namespace FdoSecrets
DatabaseWidget* backend() const;
QString backendFilePath() const;
Service* service() const;
/**
* similar to Group::isRecycled, but we also return true when the group itself is the recycle bin
*/
bool inRecycleBin(Group* group) const;
bool inRecycleBin(Entry* entry) const;

View File

@@ -258,12 +258,13 @@ namespace FdoSecrets
}
// item locked state already covers its collection's locked state
for (const auto& item : asConst(items)) {
bool l;
ret = item->locked(client, l);
Q_ASSERT(item);
bool itemLocked;
ret = item->locked(client, itemLocked);
if (ret.err()) {
return ret;
}
if (l) {
if (itemLocked) {
locked.append(item);
} else {
unlocked.append(item);