diff options
author | Robin Burchell <robin.burchell@viroteck.net> | 2016-01-03 04:48:10 +0100 |
---|---|---|
committer | Pekka Vuorela <pvuorela@iki.fi> | 2018-09-07 15:09:46 +0000 |
commit | 613d21eb3ca5bc851ea95e5405c2bcb185d12c4c (patch) | |
tree | f3d02fc4bdff554f916630d8cdc566b255939fa7 | |
parent | 0f6db779f8ca846fdd9a2d8d97be8958a056cdeb (diff) |
Correctly handle multipart/signed parts
multipart/signed parts can be the top level part having any other valid
containers inside as per RFC1847.
Change-Id: I0ff16bc04223ca4d984d946a7fb763a9d52356aa
Done-with: Valério Valério <valerio.valerio@jolla.com>
Reviewed-by: Valerio Valerio <vdv100@gmail.com>
-rw-r--r-- | src/libraries/qmfclient/qmailmessage.cpp | 28 |
1 files changed, 27 insertions, 1 deletions
diff --git a/src/libraries/qmfclient/qmailmessage.cpp b/src/libraries/qmfclient/qmailmessage.cpp index eff15df2..0253b699 100644 --- a/src/libraries/qmfclient/qmailmessage.cpp +++ b/src/libraries/qmfclient/qmailmessage.cpp @@ -1039,6 +1039,9 @@ namespace findBody case QMailMessagePart::MultipartNone: return inMultipartNone(part, ctx); + case QMailMessagePart::MultipartMixed: + return inMultipartMixed(part, ctx); + case QMailMessagePart::MultipartAlternative: return inMultipartAlternative(part, ctx); @@ -1142,8 +1145,13 @@ namespace findAttachments if (found) { found->clear(); } - if (container.multipartType() == QMailMessagePart::MultipartMixed) + + if (container.multipartType() == QMailMessagePart::MultipartMixed) { inMultipartMixed(container, found, hasAttachments); + } + if (container.multipartType() == QMailMessagePart::MultipartSigned) { + inMultipartSigned(container, found, hasAttachments); + } // In any case, the default strategy wins, even if there are no attachments return true; @@ -1200,6 +1208,24 @@ namespace findAttachments } } } + + void inMultipartSigned(const QMailMessagePartContainer &container, + Locations* found, + bool* hasAttachments) const + { + for (uint i = 0; i < container.partCount(); i++) { + const QMailMessagePart &part = container.partAt(i); + switch (part.multipartType()) { + case QMailMessagePart::MultipartNone: + inMultipartNone(part, found, hasAttachments); + break; + default: + // Default to handling as MultipartMixed + inMultipartMixed(part, found, hasAttachments); + break; + } + } + } }; class TnefAttachmentFindStrategy : public AttachmentFindStrategy |