Fix crash when building history changes

* Replace rarely hit asserts with defined nullptr checks when replacing references without a group
* Fix #7603
* Replace TOTP history comparison with checking the actual TOTP output instead of a compiled string
This commit is contained in:
Jonathan White 2022-03-24 22:34:27 -04:00
parent 48a3fd8e3c
commit 44be95cc1b
2 changed files with 2 additions and 4 deletions

View File

@ -1139,7 +1139,7 @@ QString Entry::resolveReferencePlaceholderRecursive(const QString& placeholder,
// using format from http://keepass.info/help/base/fieldrefs.html at the time of writing // using format from http://keepass.info/help/base/fieldrefs.html at the time of writing
QRegularExpressionMatch match = EntryAttributes::matchReference(placeholder); QRegularExpressionMatch match = EntryAttributes::matchReference(placeholder);
if (!match.hasMatch()) { if (!match.hasMatch() || !m_group || !m_group->database()) {
return placeholder; return placeholder;
} }
@ -1149,8 +1149,6 @@ QString Entry::resolveReferencePlaceholderRecursive(const QString& placeholder,
const EntryReferenceType searchInType = Entry::referenceType(searchIn); const EntryReferenceType searchInType = Entry::referenceType(searchIn);
Q_ASSERT(m_group);
Q_ASSERT(m_group->database());
const Entry* refEntry = m_group->database()->rootGroup()->findEntryBySearchTerm(searchText, searchInType); const Entry* refEntry = m_group->database()->rootGroup()->findEntryBySearchTerm(searchText, searchInType);
if (refEntry) { if (refEntry) {

View File

@ -232,7 +232,7 @@ void EntryHistoryModel::calculateHistoryModifications()
|| curr->timeInfo().expiryTime() != compare->timeInfo().expiryTime()) { || curr->timeInfo().expiryTime() != compare->timeInfo().expiryTime()) {
modifiedFields << tr("Expiration"); modifiedFields << tr("Expiration");
} }
if (curr->totpSettingsString() != compare->totpSettingsString()) { if (curr->totp() != compare->totp()) {
modifiedFields << tr("TOTP"); modifiedFields << tr("TOTP");
} }
if (*curr->customData() != *compare->customData()) { if (*curr->customData() != *compare->customData()) {