Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/keepassxreboot/keepassxc.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJanek Bevendorff <janek@jbev.net>2018-01-25 03:10:56 +0300
committerJanek Bevendorff <janek@jbev.net>2018-01-25 03:49:19 +0300
commit6a97a6dafc26852137530b55182dbdf369aa0e75 (patch)
tree00fbdfdb10ee653fde1a820a4f677057ae087531 /tests/TestKdbx4.cpp
parentc18d6b5ae5a37a2c3a62efdfa9a7386699b942f3 (diff)
Add test for catching KDBX4 attachment mapping errors
Diffstat (limited to 'tests/TestKdbx4.cpp')
-rw-r--r--tests/TestKdbx4.cpp70
1 files changed, 70 insertions, 0 deletions
diff --git a/tests/TestKdbx4.cpp b/tests/TestKdbx4.cpp
index 8fb0f219b..26937540a 100644
--- a/tests/TestKdbx4.cpp
+++ b/tests/TestKdbx4.cpp
@@ -188,3 +188,73 @@ void TestKdbx4::testFormat400Upgrade_data()
QTest::newRow("AES-KDF + Twofish") << KeePass2::KDF_AES_KDBX4 << KeePass2::CIPHER_TWOFISH << kdbx4;
QTest::newRow("AES-KDF (legacy) + Twofish") << KeePass2::KDF_AES_KDBX3 << KeePass2::CIPHER_TWOFISH << kdbx3;
}
+
+/**
+ * Test for catching mapping errors with duplicate attachments.
+ */
+void TestKdbx4::testDuplicateAttachments()
+{
+ QScopedPointer<Database> db(new Database());
+ db->setKey(CompositeKey());
+ db->setKdf(KeePass2::uuidToKdf(KeePass2::KDF_ARGON2));
+
+ const QByteArray attachment1("abc");
+ const QByteArray attachment2("def");
+ const QByteArray attachment3("ghi");
+
+ auto entry1 = new Entry();
+ entry1->setGroup(db->rootGroup());
+ entry1->setUuid(Uuid("aaaaaaaaaaaaaaaa"));
+ entry1->attachments()->set("a", attachment1);
+
+ auto entry2 = new Entry();
+ entry2->setGroup(db->rootGroup());
+ entry2->setUuid(Uuid("bbbbbbbbbbbbbbbb"));
+ entry2->attachments()->set("b1", attachment1);
+ entry2->beginUpdate();
+ entry2->attachments()->set("b2", attachment1);
+ entry2->endUpdate();
+ entry2->beginUpdate();
+ entry2->attachments()->set("b3", attachment2);
+ entry2->endUpdate();
+ entry2->beginUpdate();
+ entry2->attachments()->set("b4", attachment2);
+ entry2->endUpdate();
+
+ auto entry3 = new Entry();
+ entry3->setGroup(db->rootGroup());
+ entry3->setUuid(Uuid("cccccccccccccccc"));
+ entry3->attachments()->set("c1", attachment2);
+ entry3->attachments()->set("c2", attachment2);
+ entry3->attachments()->set("c3", attachment3);
+
+ QBuffer buffer;
+ buffer.open(QBuffer::ReadWrite);
+
+ KeePass2Writer writer;
+ writer.writeDatabase(&buffer, db.data());
+ if (writer.hasError()) {
+ QFAIL(qPrintable(QString("Error while writing database: %1").arg(writer.errorString())));
+ }
+
+ buffer.seek(0);
+ KeePass2Reader reader;
+ db.reset(reader.readDatabase(&buffer, CompositeKey()));
+ if (reader.hasError()) {
+ QFAIL(qPrintable(QString("Error while reading database: %1").arg(reader.errorString())));
+ }
+
+ QCOMPARE(db->rootGroup()->entries()[0]->attachments()->value("a"), attachment1);
+
+ QCOMPARE(db->rootGroup()->entries()[1]->attachments()->value("b1"), attachment1);
+ QCOMPARE(db->rootGroup()->entries()[1]->attachments()->value("b2"), attachment1);
+ QCOMPARE(db->rootGroup()->entries()[1]->attachments()->value("b3"), attachment2);
+ QCOMPARE(db->rootGroup()->entries()[1]->attachments()->value("b4"), attachment2);
+ QCOMPARE(db->rootGroup()->entries()[1]->historyItems()[0]->attachments()->value("b1"), attachment1);
+ QCOMPARE(db->rootGroup()->entries()[1]->historyItems()[1]->attachments()->value("b2"), attachment1);
+ QCOMPARE(db->rootGroup()->entries()[1]->historyItems()[2]->attachments()->value("b3"), attachment2);
+
+ QCOMPARE(db->rootGroup()->entries()[2]->attachments()->value("c1"), attachment2);
+ QCOMPARE(db->rootGroup()->entries()[2]->attachments()->value("c2"), attachment2);
+ QCOMPARE(db->rootGroup()->entries()[2]->attachments()->value("c3"), attachment3);
+}