summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorChristian Mollekopf <chrigi_1@fastmail.fm>2018-02-20 19:04:04 +0100
committerChristian Mollekopf <chrigi_1@fastmail.fm>2018-02-20 19:22:04 +0100
commite8632e18e0bef91873c6024073b5f461c07d6fe3 (patch)
tree21f068ccd2fe956c34719d3a0dc35432e5d7e8e8
parent555843597e8a36525a3ee0eeb6f72d04387297cd (diff)
downloadkube-e8632e18e0bef91873c6024073b5f461c07d6fe3.tar.gz
kube-e8632e18e0bef91873c6024073b5f461c07d6fe3.zip
Fixed encrypted+signed messages
-rw-r--r--framework/src/domain/mime/mimetreeparser/messagepart.cpp19
-rw-r--r--framework/src/domain/mime/mimetreeparser/tests/interfacetest.cpp15
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
891 sigStatusToMetaData(); 891 sigStatusToMetaData();
892 if (mNode && !textNode) { 892 if (mNode && !textNode) {
893 mOtp->mNodeHelper->setPartMetaData(mNode, mMetaData); 893 mOtp->mNodeHelper->setPartMetaData(mNode, mMetaData);
894 if (!mVerifiedText.isEmpty()) { 894 }
895 auto tempNode = new KMime::Content(); 895
896 tempNode->setContent(KMime::CRLFtoLF(mVerifiedText.constData())); 896 if (!mVerifiedText.isEmpty() && !textNode) {
897 tempNode->parse();
898 bindLifetime(tempNode);
899 897
900 if (!tempNode->head().isEmpty()) { 898 auto tempNode = new KMime::Content();
901 tempNode->contentDescription()->from7BitString("signed data"); 899 tempNode->setContent(KMime::CRLFtoLF(mVerifiedText.constData()));
902 } 900 tempNode->parse();
901 bindLifetime(tempNode);
903 902
904 parseInternal(tempNode, false); 903 if (!tempNode->head().isEmpty()) {
904 tempNode->contentDescription()->from7BitString("signed data");
905 } 905 }
906 parseInternal(tempNode, false);
906 } 907 }
907 } 908 }
908} 909}
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:
358 QCOMPARE(part->encryptionState(), MimeTreeParser::KMMsgNotEncrypted); 358 QCOMPARE(part->encryptionState(), MimeTreeParser::KMMsgNotEncrypted);
359 QCOMPARE(part->signatureState(), MimeTreeParser::KMMsgFullySigned); 359 QCOMPARE(part->signatureState(), MimeTreeParser::KMMsgFullySigned);
360 } 360 }
361
362 void testEncryptedAndSigned()
363 {
364 MimeTreeParser::ObjectTreeParser otp;
365 otp.parseObjectTree(readMailFromFile("openpgp-encrypted+signed.mbox"));
366 otp.decryptParts();
367 auto partList = otp.collectContentParts();
368 QCOMPARE(partList.size(), 1);
369 auto part = partList[0].dynamicCast<MimeTreeParser::MessagePart>();
370 QCOMPARE(part->signatures().size(), 1);
371 QCOMPARE(part->encryptions().size(), 1);
372 QCOMPARE(part->encryptionState(), MimeTreeParser::KMMsgFullyEncrypted);
373 QCOMPARE(part->signatureState(), MimeTreeParser::KMMsgFullySigned);
374 QVERIFY(otp.plainTextContent().contains(QString::fromUtf8("encrypted message text")));
375 }
361}; 376};
362 377
363QTEST_GUILESS_MAIN(InterfaceTest) 378QTEST_GUILESS_MAIN(InterfaceTest)