From 1ca358f3fdaf8312de00d9a90c9afc29d26b98f4 Mon Sep 17 00:00:00 2001 From: Jonathan White Date: Wed, 7 Oct 2020 11:51:47 -0400 Subject: [PATCH] Improve KDBX error messages --- src/format/Kdbx3Reader.cpp | 9 ++++++--- src/format/Kdbx4Reader.cpp | 14 ++++++++++---- 2 files changed, 16 insertions(+), 7 deletions(-) diff --git a/src/format/Kdbx3Reader.cpp b/src/format/Kdbx3Reader.cpp index 66935b7f7..7634beb31 100644 --- a/src/format/Kdbx3Reader.cpp +++ b/src/format/Kdbx3Reader.cpp @@ -43,7 +43,7 @@ bool Kdbx3Reader::readDatabaseImpl(QIODevice* device, // check if all required headers were present if (m_masterSeed.isEmpty() || m_encryptionIV.isEmpty() || m_streamStartBytes.isEmpty() || m_protectedStreamKey.isEmpty() || db->cipher().isNull()) { - raiseError(tr("missing database headers")); + raiseError(tr("Missing database headers")); return false; } @@ -147,7 +147,7 @@ bool Kdbx3Reader::readHeaderField(StoreDataStream& headerStream, Database* db) bool ok; auto fieldLen = Endian::readSizedInt(&headerStream, KeePass2::BYTEORDER, &ok); if (!ok) { - raiseError(tr("Invalid header field length")); + raiseError(tr("Invalid header field length: field %1").arg(fieldID)); return false; } @@ -155,7 +155,10 @@ bool Kdbx3Reader::readHeaderField(StoreDataStream& headerStream, Database* db) if (fieldLen != 0) { fieldData = headerStream.read(fieldLen); if (fieldData.size() != fieldLen) { - raiseError(tr("Invalid header data length")); + raiseError(tr("Invalid header data length: field %1, %2 expected, %3 found") + .arg(fieldID) + .arg(fieldLen) + .arg(fieldData.size())); return false; } } diff --git a/src/format/Kdbx4Reader.cpp b/src/format/Kdbx4Reader.cpp index 1dc7067dd..0698a0b2b 100644 --- a/src/format/Kdbx4Reader.cpp +++ b/src/format/Kdbx4Reader.cpp @@ -166,7 +166,7 @@ bool Kdbx4Reader::readHeaderField(StoreDataStream& device, Database* db) bool ok; auto fieldLen = Endian::readSizedInt(&device, KeePass2::BYTEORDER, &ok); if (!ok) { - raiseError(tr("Invalid header field length")); + raiseError(tr("Invalid header field length: field %1").arg(fieldID)); return false; } @@ -174,7 +174,10 @@ bool Kdbx4Reader::readHeaderField(StoreDataStream& device, Database* db) if (fieldLen != 0) { fieldData = device.read(fieldLen); if (static_cast(fieldData.size()) != fieldLen) { - raiseError(tr("Invalid header data length")); + raiseError(tr("Invalid header data length: field %1, %2 expected, %3 found") + .arg(static_cast(fieldID)) + .arg(fieldLen) + .arg(fieldData.size())); return false; } } @@ -258,7 +261,7 @@ bool Kdbx4Reader::readInnerHeaderField(QIODevice* device) bool ok; auto fieldLen = Endian::readSizedInt(device, KeePass2::BYTEORDER, &ok); if (!ok) { - raiseError(tr("Invalid inner header field length")); + raiseError(tr("Invalid inner header field length: field %1").arg(static_cast(fieldID))); return false; } @@ -266,7 +269,10 @@ bool Kdbx4Reader::readInnerHeaderField(QIODevice* device) if (fieldLen != 0) { fieldData = device->read(fieldLen); if (static_cast(fieldData.size()) != fieldLen) { - raiseError(tr("Invalid header data length")); + raiseError(tr("Invalid inner header data length: field %1, %2 expected, %3 found") + .arg(static_cast(fieldID)) + .arg(fieldLen) + .arg(fieldData.size())); return false; } }