summaryrefslogtreecommitdiffstats
path: root/src/libraries/qmfclient
diff options
context:
space:
mode:
authorRobin Burchell <robin.burchell@viroteck.net>2016-01-03 04:51:34 +0100
committerPekka Vuorela <pvuorela@iki.fi>2018-09-08 12:22:07 +0000
commitd676bc1e0e90d69d4c843460be5ad352e60d8a28 (patch)
treef0bd96f31327deb5e5d253da203fcd80587909f3 /src/libraries/qmfclient
parent96d1f618c8a5a87a441306191d19e66144db32b0 (diff)
Gracefully handle bodystructure where boundaries are reported as NIL.
Some servers (e.g mail.ru) report boundaries as NIL for multipart messages. from my understanding of RFC2046 this is invalid, but we can gracefully handle those by setting them to empty. Avoids crash when requesting a partAt() for a message that does not exist, this happened due to NIL boundaries, but no need to crash in such cases. Change-Id: I676e444184ad1ca39f93bc8d18635f134a315d0a Done-with: Valério Valério <valerio.valerio@jolla.com> Reviewed-by: Valerio Valerio <vdv100@gmail.com>
Diffstat (limited to 'src/libraries/qmfclient')
-rw-r--r--src/libraries/qmfclient/qmailmessage.cpp18
1 files changed, 14 insertions, 4 deletions
diff --git a/src/libraries/qmfclient/qmailmessage.cpp b/src/libraries/qmfclient/qmailmessage.cpp
index c7c075b6..da8b74b7 100644
--- a/src/libraries/qmfclient/qmailmessage.cpp
+++ b/src/libraries/qmfclient/qmailmessage.cpp
@@ -3942,8 +3942,13 @@ const QMailMessagePart& QMailMessagePartContainerPrivate::partAt(const QMailMess
const QList<QMailMessagePart>* partList = &_messageParts;
foreach (uint index, location.d->_indices) {
- part = &(partList->at(index - 1));
- partList = &(part->impl<const QMailMessagePartContainerPrivate>()->_messageParts);
+ if (index >= 0 && index <= partList->size()) {
+ part = &(partList->at(index - 1));
+ partList = &(part->impl<const QMailMessagePartContainerPrivate>()->_messageParts);
+ } else {
+ qMailLog(Messaging) << Q_FUNC_INFO << "Invalid index, container does not have a part at " << index;
+ Q_ASSERT(false);
+ }
}
Q_ASSERT(part);
@@ -3956,8 +3961,13 @@ QMailMessagePart& QMailMessagePartContainerPrivate::partAt(const QMailMessagePar
QList<QMailMessagePart>* partList = &_messageParts;
foreach (uint index, location.d->_indices) {
- part = &((*partList)[index - 1]);
- partList = &(part->impl<QMailMessagePartContainerPrivate>()->_messageParts);
+ if (index >= 0 && index <= partList->size()) {
+ part = &((*partList)[index - 1]);
+ partList = &(part->impl<QMailMessagePartContainerPrivate>()->_messageParts);
+ } else {
+ qMailLog(Messaging) << Q_FUNC_INFO << "Invalid index, container does not have a part at " << index;
+ Q_ASSERT(false);
+ }
}
return *part;