mirror of
https://github.com/keepassxreboot/keepassxc.git
synced 2025-07-25 07:45:22 -04:00
Fix KDBX4 reader/writer attachment mapping error
Write duplicate attachments to the binary inner header only once and skip duplicate entries when reading a KDBX4 file. This fixes a an attachment mapping problem when an attachment appears more than once in a database (which occurs frequently when editing attachment entries and history is turned on)
This commit is contained in:
parent
ee03d44053
commit
c18d6b5ae5
5 changed files with 40 additions and 11 deletions
|
@ -211,12 +211,20 @@ bool Kdbx4Writer::writeInnerHeaderField(QIODevice* device, KeePass2::InnerHeader
|
|||
void Kdbx4Writer::writeAttachments(QIODevice* device, Database* db)
|
||||
{
|
||||
const QList<Entry*> allEntries = db->rootGroup()->entriesRecursive(true);
|
||||
QSet<QByteArray> writtenAttachments;
|
||||
|
||||
for (Entry* entry : allEntries) {
|
||||
const QList<QString> attachmentKeys = entry->attachments()->keys();
|
||||
for (const QString& key : attachmentKeys) {
|
||||
QByteArray data = entry->attachments()->value(key);
|
||||
data.prepend("\x01");
|
||||
QByteArray data("\x01");
|
||||
data.append(entry->attachments()->value(key));
|
||||
|
||||
if (writtenAttachments.contains(data)) {
|
||||
continue;
|
||||
}
|
||||
|
||||
writeInnerHeaderField(device, KeePass2::InnerHeaderFieldID::Binary, data);
|
||||
writtenAttachments.insert(data);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue