From 208b803fbe337f36bc334751426fd459cf6f239a Mon Sep 17 00:00:00 2001 From: Felix Geyer Date: Tue, 2 Feb 2016 00:41:16 +0100 Subject: [PATCH] Fix KeePass2Repair to retain multi-byte UTF-8 chars. Since char is (often) unsigned the ch < 0x20 check matched all multi-byte encoded UTF-8 chars. --- src/format/KeePass2Repair.cpp | 2 +- tests/TestKeePass2Writer.cpp | 4 ++-- tests/data/bug392.kdbx | Bin 1374 -> 1374 bytes 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/format/KeePass2Repair.cpp b/src/format/KeePass2Repair.cpp index 4eff3d80..f435a7d5 100644 --- a/src/format/KeePass2Repair.cpp +++ b/src/format/KeePass2Repair.cpp @@ -66,7 +66,7 @@ KeePass2Repair::RepairResult KeePass2Repair::repairDatabase(QIODevice* device, c // try to fix broken databases because of bug #392 for (int i = (xmlData.size() - 1); i >= 0; i--) { - char ch = xmlData.at(i); + quint8 ch = static_cast(xmlData.at(i)); if (ch < 0x20 && ch != 0x09 && ch != 0x0A && ch != 0x0D) { xmlData.remove(i, 1); repairAction = true; diff --git a/tests/TestKeePass2Writer.cpp b/tests/TestKeePass2Writer.cpp index 638d4002..1c7b5f70 100644 --- a/tests/TestKeePass2Writer.cpp +++ b/tests/TestKeePass2Writer.cpp @@ -133,7 +133,7 @@ void TestKeePass2Writer::testRepair() { QString brokenDbFilename = QString(KEEPASSX_TEST_DATA_DIR).append("/bug392.kdbx"); // master password = test - // entry username: testuser\x10 + // entry username: testuser\x10\x20AC // entry password: testpw CompositeKey key; key.addKey(PasswordKey("test")); @@ -153,7 +153,7 @@ void TestKeePass2Writer::testRepair() QVERIFY(dbRepaired); QCOMPARE(dbRepaired->rootGroup()->entries().size(), 1); - QCOMPARE(dbRepaired->rootGroup()->entries().at(0)->username(), QString("testuser")); + QCOMPARE(dbRepaired->rootGroup()->entries().at(0)->username(), QString("testuser").append(0x20AC)); QCOMPARE(dbRepaired->rootGroup()->entries().at(0)->password(), QString("testpw")); } diff --git a/tests/data/bug392.kdbx b/tests/data/bug392.kdbx index c649f8dc240e704f65b36e7127144e75cc77a10b..0953d86775c83ed5b7976d59c2c8eda360b4521d 100644 GIT binary patch delta 1350 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