From e8632e18e0bef91873c6024073b5f461c07d6fe3 Mon Sep 17 00:00:00 2001 From: Christian Mollekopf Date: Tue, 20 Feb 2018 19:04:04 +0100 Subject: Fixed encrypted+signed messages --- .../src/domain/mime/mimetreeparser/messagepart.cpp | 19 ++++++++++--------- .../mime/mimetreeparser/tests/interfacetest.cpp | 15 +++++++++++++++ 2 files changed, 25 insertions(+), 9 deletions(-) diff --git a/framework/src/domain/mime/mimetreeparser/messagepart.cpp b/framework/src/domain/mime/mimetreeparser/messagepart.cpp index 5b532524..4f27704f 100644 --- a/framework/src/domain/mime/mimetreeparser/messagepart.cpp +++ b/framework/src/domain/mime/mimetreeparser/messagepart.cpp @@ -891,18 +891,19 @@ void SignedMessagePart::setVerificationResult(const GpgME::VerificationResult &r sigStatusToMetaData(); if (mNode && !textNode) { mOtp->mNodeHelper->setPartMetaData(mNode, mMetaData); - if (!mVerifiedText.isEmpty()) { - auto tempNode = new KMime::Content(); - tempNode->setContent(KMime::CRLFtoLF(mVerifiedText.constData())); - tempNode->parse(); - bindLifetime(tempNode); + } + + if (!mVerifiedText.isEmpty() && !textNode) { - if (!tempNode->head().isEmpty()) { - tempNode->contentDescription()->from7BitString("signed data"); - } + auto tempNode = new KMime::Content(); + tempNode->setContent(KMime::CRLFtoLF(mVerifiedText.constData())); + tempNode->parse(); + bindLifetime(tempNode); - parseInternal(tempNode, false); + if (!tempNode->head().isEmpty()) { + tempNode->contentDescription()->from7BitString("signed data"); } + parseInternal(tempNode, false); } } } diff --git a/framework/src/domain/mime/mimetreeparser/tests/interfacetest.cpp b/framework/src/domain/mime/mimetreeparser/tests/interfacetest.cpp index 15c573e2..a8e608ba 100644 --- a/framework/src/domain/mime/mimetreeparser/tests/interfacetest.cpp +++ b/framework/src/domain/mime/mimetreeparser/tests/interfacetest.cpp @@ -358,6 +358,21 @@ private slots: QCOMPARE(part->encryptionState(), MimeTreeParser::KMMsgNotEncrypted); QCOMPARE(part->signatureState(), MimeTreeParser::KMMsgFullySigned); } + + void testEncryptedAndSigned() + { + MimeTreeParser::ObjectTreeParser otp; + otp.parseObjectTree(readMailFromFile("openpgp-encrypted+signed.mbox")); + otp.decryptParts(); + auto partList = otp.collectContentParts(); + QCOMPARE(partList.size(), 1); + auto part = partList[0].dynamicCast(); + QCOMPARE(part->signatures().size(), 1); + QCOMPARE(part->encryptions().size(), 1); + QCOMPARE(part->encryptionState(), MimeTreeParser::KMMsgFullyEncrypted); + QCOMPARE(part->signatureState(), MimeTreeParser::KMMsgFullySigned); + QVERIFY(otp.plainTextContent().contains(QString::fromUtf8("encrypted message text"))); + } }; QTEST_GUILESS_MAIN(InterfaceTest) -- cgit v1.2.3