From 97a1daaa7dfdffbcce18f87fcc666c9896e31e38 Mon Sep 17 00:00:00 2001 From: Christian Mollekopf Date: Mon, 26 Feb 2018 18:07:51 +0100 Subject: gpg error handling cleanup --- .../src/domain/mime/mimetreeparser/messagepart.cpp | 25 +++++++++++----------- .../mime/mimetreeparser/tests/gpgerrortest.cpp | 18 +++++----------- 2 files changed, 17 insertions(+), 26 deletions(-) diff --git a/framework/src/domain/mime/mimetreeparser/messagepart.cpp b/framework/src/domain/mime/mimetreeparser/messagepart.cpp index 995ea811..541efd7f 100644 --- a/framework/src/domain/mime/mimetreeparser/messagepart.cpp +++ b/framework/src/domain/mime/mimetreeparser/messagepart.cpp @@ -979,8 +979,6 @@ void EncryptedMessagePart::startDecryption(const QByteArray &text, const QTextCo bool EncryptedMessagePart::okDecryptMIME(KMime::Content &data) { mError = NoError; - auto passphraseError = false; - auto noSecKey = false; mMetaData.errorText.clear(); mMetaData.auditLogError = GpgME::Error(); mMetaData.auditLog.clear(); @@ -1003,36 +1001,37 @@ bool EncryptedMessagePart::okDecryptMIME(KMime::Content &data) } mDecryptRecipients = decryptResult.recipients(); - auto decryptionOk = !decryptResult.error(); - - if (!decryptionOk && mMetaData.isSigned) { + if (decryptResult.error() && mMetaData.isSigned) { //Only a signed part mMetaData.isEncrypted = false; mDecryptedData = plainText; return true; } - passphraseError = decryptResult.error().isCanceled() || decryptResult.error().code() == GPG_ERR_NO_SECKEY; - mMetaData.isEncrypted = decryptResult.error().code() != GPG_ERR_NO_DATA; - mMetaData.errorText = QString::fromLocal8Bit(decryptResult.error().asString()); if (mMetaData.isEncrypted && decryptResult.numRecipients() > 0) { mMetaData.keyId = decryptResult.recipient(0).keyID(); } - if (decryptionOk) { + if (!decryptResult.error()) { mDecryptedData = plainText; setText(QString::fromUtf8(mDecryptedData.constData())); } else { - noSecKey = true; + mMetaData.isEncrypted = decryptResult.error().code() != GPG_ERR_NO_DATA; + mMetaData.errorText = QString::fromLocal8Bit(decryptResult.error().asString()); + + std::stringstream ss; + ss << decryptResult << '\n' << verifyResult; + qWarning() << "Decryption failed: " << ss.str().c_str(); + + bool passphraseError = decryptResult.error().isCanceled() || decryptResult.error().code() == GPG_ERR_NO_SECKEY; + + auto noSecKey = true; foreach (const GpgME::DecryptionResult::Recipient &recipient, decryptResult.recipients()) { noSecKey &= (recipient.status().code() == GPG_ERR_NO_SECKEY); } if (!passphraseError && !noSecKey) { // GpgME do not detect passphrase error correctly passphraseError = true; } - std::stringstream ss; - ss << decryptResult << '\n' << verifyResult; - qWarning() << "Decryption failed: " << ss.str().c_str(); if(noSecKey) { mError = NoKeyError; diff --git a/framework/src/domain/mime/mimetreeparser/tests/gpgerrortest.cpp b/framework/src/domain/mime/mimetreeparser/tests/gpgerrortest.cpp index 32bffeb5..7e0e0d04 100644 --- a/framework/src/domain/mime/mimetreeparser/tests/gpgerrortest.cpp +++ b/framework/src/domain/mime/mimetreeparser/tests/gpgerrortest.cpp @@ -71,13 +71,10 @@ private slots: auto part = partList[0]; QVERIFY(bool(part)); - qWarning() << part->metaObject()->className() << part->text() << part->partMetaData()->status; QVERIFY(part->text().startsWith("asdasd")); QCOMPARE(part->encryptions().size(), 1); auto enc = part->encryptions()[0]; QCOMPARE(enc->error(), MimeTreeParser::MessagePart::NoError); - // QCOMPARE(enc->errorType(), Encryption::NoError); - // QCOMPARE(enc->errorString(), QString()); // QCOMPARE((int) enc->recipients().size(), 2); } @@ -109,11 +106,8 @@ private slots: QCOMPARE(part->encryptions().size(), 1); QVERIFY(part->text().isEmpty()); - // auto enc = part->encryptions()[0]; - // qDebug() << "HUHU"<< enc->errorType(); - // QCOMPARE(enc->errorType(), Encryption::UnknownError); - // QCOMPARE(enc->errorString(), QString("Crypto plug-in \"OpenPGP\" could not decrypt the data.
Error: No data")); - // QCOMPARE((int) enc->recipients().size(), 0); + auto enc = part->encryptions()[0]; + QCOMPARE(enc->error(), MimeTreeParser::MessagePart::NoKeyError); } void testGpgIncorrectGPGHOME_data() @@ -143,10 +137,8 @@ private slots: QCOMPARE(part->encryptions().size(), 1); QCOMPARE(part->signatures().size(), 0); QVERIFY(part->text().isEmpty()); - // auto enc = part->encryptions()[0]; - // qDebug() << enc->errorType(); - // QCOMPARE(enc->errorType(), Encryption::KeyMissing); - // QCOMPARE(enc->errorString(), QString("Crypto plug-in \"OpenPGP\" could not decrypt the data.
Error: Decryption failed")); + auto enc = part->encryptions()[0]; + QCOMPARE(enc->error(), MimeTreeParser::MessagePart::NoKeyError); // QCOMPARE((int) enc->recipients().size(), 2); } @@ -178,7 +170,7 @@ public Q_SLOTS: resetEnv(); } private: - void unsetEnv(const QByteArray &name) + void unsetEnv(const QByteArray &name) { mModifiedEnv << name; unsetenv(name); -- cgit v1.2.3