From c6105a08ab69889b9272fde002fabf49702d7e62 Mon Sep 17 00:00:00 2001 From: Felix Geyer Date: Mon, 13 Jul 2015 21:00:12 +0200 Subject: [PATCH] KeePass2XmlReader: Don't fail wheh nreading empty UUIDs. Closes #298 --- src/format/KeePass2XmlReader.cpp | 7 +++++-- tests/TestKeePass2XmlReader.cpp | 13 +++++++++++++ tests/TestKeePass2XmlReader.h | 1 + 3 files changed, 19 insertions(+), 2 deletions(-) diff --git a/src/format/KeePass2XmlReader.cpp b/src/format/KeePass2XmlReader.cpp index 9af89db77..c589b326c 100644 --- a/src/format/KeePass2XmlReader.cpp +++ b/src/format/KeePass2XmlReader.cpp @@ -357,7 +357,7 @@ void KeePass2XmlReader::parseIcon() while (!m_xml.error() && m_xml.readNextStartElement()) { if (m_xml.name() == "UUID") { uuid = readUuid(); - uuidSet = true; + uuidSet = !uuid.isNull(); } else if (m_xml.name() == "Data") { icon.loadFromData(readBinary()); @@ -1104,7 +1104,10 @@ int KeePass2XmlReader::readNumber() Uuid KeePass2XmlReader::readUuid() { QByteArray uuidBin = readBinary(); - if (uuidBin.length() != Uuid::Length) { + if (uuidBin.isEmpty()) { + return Uuid(); + } + else if (uuidBin.length() != Uuid::Length) { if (m_strictMode) { raiseError("Invalid uuid value"); } diff --git a/tests/TestKeePass2XmlReader.cpp b/tests/TestKeePass2XmlReader.cpp index e88e990a6..b458761db 100644 --- a/tests/TestKeePass2XmlReader.cpp +++ b/tests/TestKeePass2XmlReader.cpp @@ -395,6 +395,19 @@ void TestKeePass2XmlReader::testBroken_data() QTest::newRow("BrokenDeletedObjects (not strict)") << "BrokenDeletedObjects" << false << false; } +void TestKeePass2XmlReader::testEmptyUuids() +{ + KeePass2XmlReader reader; + reader.setStrictMode(true); + QString xmlFile = QString("%1/%2.xml").arg(KEEPASSX_TEST_DATA_DIR, "EmptyUuids"); + QVERIFY(QFile::exists(xmlFile)); + QScopedPointer db(reader.readDatabase(xmlFile)); + if (reader.hasError()) { + qWarning("Reader error: %s", qPrintable(reader.errorString())); + } + QVERIFY(!reader.hasError()); +} + void TestKeePass2XmlReader::cleanupTestCase() { delete m_db; diff --git a/tests/TestKeePass2XmlReader.h b/tests/TestKeePass2XmlReader.h index 6a6c61952..651ac5614 100644 --- a/tests/TestKeePass2XmlReader.h +++ b/tests/TestKeePass2XmlReader.h @@ -41,6 +41,7 @@ private Q_SLOTS: void testDeletedObjects(); void testBroken(); void testBroken_data(); + void testEmptyUuids(); void cleanupTestCase(); private: