From df9e47668b510e9dc92e4c98d17764ae626809dc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sandro=20Knau=C3=9F?= Date: Tue, 15 Nov 2016 15:53:26 +0100 Subject: Add mimetreeparsertest for different gpgme errors --- framework/domain/mimetreeparser/interface.cpp | 26 ++++++++++++++++++++++++++ 1 file changed, 26 insertions(+) (limited to 'framework/domain/mimetreeparser/interface.cpp') diff --git a/framework/domain/mimetreeparser/interface.cpp b/framework/domain/mimetreeparser/interface.cpp index 6184ae82..15e28349 100644 --- a/framework/domain/mimetreeparser/interface.cpp +++ b/framework/domain/mimetreeparser/interface.cpp @@ -308,6 +308,7 @@ public: void createMailMime(const MimeTreeParser::TextMessagePart::Ptr &part); void createMailMime(const MimeTreeParser::AlternativeMessagePart::Ptr &part); void createMailMime(const MimeTreeParser::HtmlMessagePart::Ptr &part); + void createMailMime(const MimeTreeParser::EncryptedMessagePart::Ptr &part); static Encryption::Ptr createEncryption(const MimeTreeParser::EncryptedMessagePart::Ptr& part); void appendEncryption(const MimeTreeParser::EncryptedMessagePart::Ptr &part); @@ -359,6 +360,12 @@ void PartPrivate::createMailMime(const MimeTreeParser::MimeMessagePart::Ptr& par mMailMime->d->mNode = part->mNode; } +void PartPrivate::createMailMime(const MimeTreeParser::EncryptedMessagePart::Ptr& part) +{ + mMailMime = MailMime::Ptr(new MailMime); + mMailMime->d->mNode = part->mNode; +} + void PartPrivate::appendSubPart(Part::Ptr subpart) { subpart->d->mParent = q; @@ -763,6 +770,7 @@ public: void fillFrom(MimeTreeParser::TextMessagePart::Ptr part); void fillFrom(MimeTreeParser::HtmlMessagePart::Ptr part); void fillFrom(MimeTreeParser::AttachmentMessagePart::Ptr part); + void createEncryptionFailBlock(const MimeTreeParser::EncryptedMessagePart::Ptr &part); SinglePart *q; QVector mContent; @@ -781,6 +789,9 @@ void SinglePartPrivate::fillFrom(MimeTreeParser::TextMessagePart::Ptr part) auto sig = mp.dynamicCast(); if (enc) { d_ptr->appendEncryption(enc); + if (!enc->isDecryptable()) { + d_ptr->mContent = QByteArray(); + } const auto s = enc->subParts(); if (s.size() == 1) { sig = s[0].dynamicCast(); @@ -822,6 +833,14 @@ void SinglePartPrivate::fillFrom(MimeTreeParser::AttachmentMessagePart::Ptr part } } +void SinglePartPrivate::createEncryptionFailBlock(const MimeTreeParser::EncryptedMessagePart::Ptr &part) +{ + mType = "plaintext"; + mContent.clear(); + mContent.append(std::make_shared(QByteArray(), q)); + q->reachParentD()->createMailMime(part); +} + SinglePart::SinglePart() : d(std::unique_ptr(new SinglePartPrivate)) { @@ -917,6 +936,13 @@ void ParserPrivate::createTree(const MimeTreeParser::MessagePart::Ptr &start, co auto subTree = std::make_shared(); if (enc) { subTree->d->appendEncryption(enc); + if (!enc->isDecryptable()) { + auto part = std::make_shared(); + part->d->createEncryptionFailBlock(enc); + part->reachParentD()->setEncryptions(subTree->d->encryptions()); + tree->d->appendSubPart(part); + return; + } } if (sig) { subTree->d->appendSignature(sig); -- cgit v1.2.3