summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRobin Burchell <robin.burchell@viroteck.net>2016-01-03 04:48:10 +0100
committerPekka Vuorela <pvuorela@iki.fi>2018-09-07 15:09:46 +0000
commit613d21eb3ca5bc851ea95e5405c2bcb185d12c4c (patch)
treef3d02fc4bdff554f916630d8cdc566b255939fa7
parent0f6db779f8ca846fdd9a2d8d97be8958a056cdeb (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.cpp28
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