diff options
author | AleksW <qt-info@nokia.com> | 2010-04-14 17:59:36 +1000 |
---|---|---|
committer | Don Sanders <don.sanders@nokia.com> | 2010-04-22 19:04:41 +1000 |
commit | 15b6caa0e85a0688d312655882ea2c0accce4b77 (patch) | |
tree | 97d773e5c0199ce5145a66c713692225f6fe6170 | |
parent | 3aa434d64aa27beb28948d9fc705528601d14411 (diff) |
Fix ID prefixing on Windows Mobile and Symbian for invalid ids. Replace prefixing consistency checks with warnings instead of assertions and ensure invalid id's retain a prefix when converted to strings. Move prefixing code to common messagingutil file.
Fixes: MOBILITY-377
-rw-r--r-- | src/messaging/messagingutil.cpp | 15 | ||||
-rw-r--r-- | src/messaging/qmessageaccountid_symbian.cpp | 2 | ||||
-rw-r--r-- | src/messaging/qmessageaccountid_win.cpp | 7 | ||||
-rw-r--r-- | src/messaging/qmessagecontentcontainer_p.h | 7 | ||||
-rw-r--r-- | src/messaging/qmessagecontentcontainerid_win.cpp | 5 | ||||
-rw-r--r-- | src/messaging/qmessagefolderid_symbian.cpp | 2 | ||||
-rw-r--r-- | src/messaging/qmessagefolderid_win.cpp | 7 | ||||
-rw-r--r-- | src/messaging/qmessageid_symbian.cpp | 2 | ||||
-rw-r--r-- | src/messaging/qmessageid_win.cpp | 8 | ||||
-rw-r--r-- | src/messaging/qmtmengine_symbian.cpp | 8 | ||||
-rw-r--r-- | src/messaging/winhelpers.cpp | 20 | ||||
-rw-r--r-- | src/messaging/winhelpers_p.h | 6 | ||||
-rw-r--r-- | tests/auto/support/support_win.cpp | 6 |
13 files changed, 41 insertions, 54 deletions
diff --git a/src/messaging/messagingutil.cpp b/src/messaging/messagingutil.cpp index 1512935715..b1317b7565 100644 --- a/src/messaging/messagingutil.cpp +++ b/src/messaging/messagingutil.cpp @@ -40,6 +40,7 @@ ****************************************************************************/
#include "messagingutil_p.h"
+#include <QDebug>
QTM_BEGIN_NAMESPACE
@@ -47,21 +48,25 @@ namespace MessagingUtil { QString addIdPrefix(const QString& id)
{
- Q_ASSERT(!id.startsWith(idPrefix()));
- return QString(idPrefix()) + id;
+ if(id.startsWith(idPrefix()))
+ qWarning() << "ID already prefixed";
+
+ return idPrefix() + id;
}
QString stripIdPrefix(const QString& id)
{
- Q_ASSERT(id.startsWith(idPrefix()));
- return id.right(id.length() - QString(idPrefix()).length());
+ if(!id.startsWith(idPrefix()))
+ qWarning() << "ID not prefixed";
+
+ return id.right(id.length() - idPrefix().length());
}
QString idPrefix()
{
#ifdef Q_OS_SYMBIAN
static QString prefix("MTM_");
-#elif defined(Q_OS_WINDOWS)
+#elif defined(Q_OS_WIN)
static QString prefix("WIN_");
#else
static QString prefix("QMF_");
diff --git a/src/messaging/qmessageaccountid_symbian.cpp b/src/messaging/qmessageaccountid_symbian.cpp index 9f9a3d2796..dd6b7c7768 100644 --- a/src/messaging/qmessageaccountid_symbian.cpp +++ b/src/messaging/qmessageaccountid_symbian.cpp @@ -115,7 +115,7 @@ bool QMessageAccountId::operator<(const QMessageAccountId& other) const QString QMessageAccountId::toString() const { if (!isValid()) { - return QString(); + return addIdPrefix(QString()); } return addIdPrefix(d_ptr->_id); diff --git a/src/messaging/qmessageaccountid_win.cpp b/src/messaging/qmessageaccountid_win.cpp index 82790b7cad..20225c9fa1 100644 --- a/src/messaging/qmessageaccountid_win.cpp +++ b/src/messaging/qmessageaccountid_win.cpp @@ -42,6 +42,7 @@ #include <QByteArray> #include <QDataStream> #include <MAPIUtil.h> +#include <messagingutil_p.h> QTM_BEGIN_NAMESPACE @@ -90,7 +91,7 @@ QMessageAccountId::QMessageAccountId(const QMessageAccountId& other) QMessageAccountId::QMessageAccountId(const QString& id) : d_ptr(new QMessageAccountIdPrivate(this)) { - QDataStream idStream(QByteArray::fromBase64(WinHelpers::stripIdPrefix(id).toLatin1())); + QDataStream idStream(QByteArray::fromBase64(MessagingUtil::stripIdPrefix(id).toLatin1())); idStream >> d_ptr->_storeRecordKey; } @@ -128,13 +129,13 @@ bool QMessageAccountId::operator<(const QMessageAccountId& other) const QString QMessageAccountId::toString() const { if (!isValid()) - return QString(); + return MessagingUtil::addIdPrefix(QString()); QByteArray encodedId; QDataStream encodedIdStream(&encodedId, QIODevice::WriteOnly); encodedIdStream << d_ptr->_storeRecordKey; - return WinHelpers::addIdPrefix(encodedId.toBase64()); + return MessagingUtil::addIdPrefix(encodedId.toBase64()); } bool QMessageAccountId::isValid() const diff --git a/src/messaging/qmessagecontentcontainer_p.h b/src/messaging/qmessagecontentcontainer_p.h index a7277e1a64..5e5cac1304 100644 --- a/src/messaging/qmessagecontentcontainer_p.h +++ b/src/messaging/qmessagecontentcontainer_p.h @@ -44,6 +44,7 @@ #include "qmessageglobal.h" #include "qmessagecontentcontainer.h" #include "qmessage.h" +#include "messagingutil_p.h" #ifdef USE_QMF_IMPLEMENTATION #include "qmfhelpers_p.h" @@ -355,7 +356,7 @@ public: return; } #endif - container.d_ptr->_id = QMessageContentContainerId(WinHelpers::addIdPrefix(QString::number(_attachments.count()+1))); + container.d_ptr->_id = QMessageContentContainerId(MessagingUtil::addIdPrefix(QString::number(_attachments.count()+1))); _attachments.append(container); return container.d_ptr->_id; } @@ -370,14 +371,14 @@ public: #endif _attachments.prepend(container); for (int i = 0; i < _attachments.count(); ++i) { - _attachments[i].d_ptr->_id = QMessageContentContainerId(WinHelpers::addIdPrefix(QString::number(i+1))); + _attachments[i].d_ptr->_id = QMessageContentContainerId(MessagingUtil::addIdPrefix(QString::number(i+1))); } return _attachments[0].d_ptr->_id; } QMessageContentContainerId bodyContentId() const { - return QMessageContentContainerId(WinHelpers::addIdPrefix(QString::number(0))); + return QMessageContentContainerId(MessagingUtil::addIdPrefix(QString::number(0))); } static QString attachmentFilename(const QMessageContentContainer& container) diff --git a/src/messaging/qmessagecontentcontainerid_win.cpp b/src/messaging/qmessagecontentcontainerid_win.cpp index bcbe437eac..4314b8d7da 100644 --- a/src/messaging/qmessagecontentcontainerid_win.cpp +++ b/src/messaging/qmessagecontentcontainerid_win.cpp @@ -41,6 +41,7 @@ #include "qmessagecontentcontainerid.h" #include "qmessagecontentcontainerid_p.h" #include "winhelpers_p.h" +#include <messagingutil_p.h> QTM_BEGIN_NAMESPACE @@ -59,7 +60,7 @@ QMessageContentContainerId::QMessageContentContainerId(const QString& id) : d_ptr(new QMessageContentContainerIdPrivate) { if (!id.isEmpty()) { - d_ptr->_number = WinHelpers::stripIdPrefix(id).toUInt(); + d_ptr->_number = MessagingUtil::stripIdPrefix(id).toUInt(); } } @@ -84,7 +85,7 @@ QMessageContentContainerId& QMessageContentContainerId::operator=(const QMessage QString QMessageContentContainerId::toString() const { - return WinHelpers::addIdPrefix(QString::number(d_ptr->_number)); + return MessagingUtil::addIdPrefix(QString::number(d_ptr->_number)); } bool QMessageContentContainerId::isValid() const diff --git a/src/messaging/qmessagefolderid_symbian.cpp b/src/messaging/qmessagefolderid_symbian.cpp index 1804ec3012..07f69cc974 100644 --- a/src/messaging/qmessagefolderid_symbian.cpp +++ b/src/messaging/qmessagefolderid_symbian.cpp @@ -115,7 +115,7 @@ bool QMessageFolderId::operator<(const QMessageFolderId& other) const QString QMessageFolderId::toString() const { if (!isValid()) { - return QString(); + return addIdPrefix(QString()); } return addIdPrefix(d_ptr->_id); diff --git a/src/messaging/qmessagefolderid_win.cpp b/src/messaging/qmessagefolderid_win.cpp index e63f06353c..3010df0c63 100644 --- a/src/messaging/qmessagefolderid_win.cpp +++ b/src/messaging/qmessagefolderid_win.cpp @@ -44,6 +44,7 @@ #include <QDataStream> #include <MAPIUtil.h> #include <QDebug> +#include <messagingutil_p.h> QTM_BEGIN_NAMESPACE @@ -108,7 +109,7 @@ QMessageFolderId::QMessageFolderId(const QMessageFolderId& other) QMessageFolderId::QMessageFolderId(const QString& id) : d_ptr(new QMessageFolderIdPrivate(this)) { - QDataStream idStream(QByteArray::fromBase64(WinHelpers::stripIdPrefix(id).toLatin1())); + QDataStream idStream(QByteArray::fromBase64(MessagingUtil::stripIdPrefix(id).toLatin1())); d_ptr->_valid = true; #ifdef _WIN32_WCE idStream >> d_ptr->_entryId; @@ -185,7 +186,7 @@ bool QMessageFolderId::operator<(const QMessageFolderId& other) const QString QMessageFolderId::toString() const { if (!isValid()) - return QString(); + return MessagingUtil::addIdPrefix(QString()); QByteArray encodedId; QDataStream encodedIdStream(&encodedId, QIODevice::WriteOnly); #ifdef _WIN32_WCE @@ -201,7 +202,7 @@ QString QMessageFolderId::toString() const if (d_ptr->_entryId.count()) encodedIdStream << d_ptr->_entryId; #endif - return WinHelpers::addIdPrefix(encodedId.toBase64()); + return MessagingUtil::addIdPrefix(encodedId.toBase64()); } bool QMessageFolderId::isValid() const diff --git a/src/messaging/qmessageid_symbian.cpp b/src/messaging/qmessageid_symbian.cpp index 21461f1b77..7d21d2199a 100644 --- a/src/messaging/qmessageid_symbian.cpp +++ b/src/messaging/qmessageid_symbian.cpp @@ -116,7 +116,7 @@ bool QMessageId::operator<(const QMessageId& other) const QString QMessageId::toString() const { - return d_ptr ? addIdPrefix(d_ptr->_id) : QString(); + return d_ptr ? addIdPrefix(d_ptr->_id) : addIdPrefix(QString()); } bool QMessageId::isValid() const diff --git a/src/messaging/qmessageid_win.cpp b/src/messaging/qmessageid_win.cpp index ae1c1757a5..2fed26eb4a 100644 --- a/src/messaging/qmessageid_win.cpp +++ b/src/messaging/qmessageid_win.cpp @@ -43,7 +43,7 @@ #include <QDataStream> #include <MAPIUtil.h> #include <QDebug> - +#include <messagingutil_p.h> QTM_BEGIN_NAMESPACE @@ -180,7 +180,7 @@ QMessageId::QMessageId(const QMessageId& other) QMessageId::QMessageId(const QString& id) : d_ptr(new QMessageIdPrivate(this)) { - QDataStream idStream(QByteArray::fromBase64(WinHelpers::stripIdPrefix(id).toLatin1())); + QDataStream idStream(QByteArray::fromBase64(MessagingUtil::stripIdPrefix(id).toLatin1())); #ifdef _WIN32_WCE idStream >> d_ptr->_entryId; @@ -270,7 +270,7 @@ bool QMessageId::operator<(const QMessageId& other) const QString QMessageId::toString() const { if (!isValid()) - return QString(); + return MessagingUtil::addIdPrefix(QString()); #ifndef _WIN32_WCE if (d_ptr->_messageRecordKey.isEmpty()) @@ -290,7 +290,7 @@ QString QMessageId::toString() const encodedIdStream << d_ptr->_folderRecordKey; encodedIdStream << d_ptr->_storeRecordKey; - return WinHelpers::addIdPrefix(encodedId.toBase64()); + return MessagingUtil::addIdPrefix(encodedId.toBase64()); } bool QMessageId::isValid() const diff --git a/src/messaging/qmtmengine_symbian.cpp b/src/messaging/qmtmengine_symbian.cpp index 6af587b7ab..da4d31612b 100644 --- a/src/messaging/qmtmengine_symbian.cpp +++ b/src/messaging/qmtmengine_symbian.cpp @@ -1817,7 +1817,7 @@ QMessageFolderIdList CMTMEngine::filterMessageFoldersL(const QMessageFolderFilte { if (pf->_comparatorType == QMessageFolderFilterPrivate::Equality) { QMessageDataComparator::EqualityComparator cmp(static_cast<QMessageDataComparator::EqualityComparator>(pf->_comparatorValue)); - if (pf->_value.toString().length() > 0) { + if (pf->_value.toString().length() > idPrefix().length()) { bool folderOk = false; long int folderId = folderIdFromQMessageFolderId(QMessageFolderId(pf->_value.toString())); CMsvEntry* pEntry = retrieveCMsvEntryAndPushToCleanupStack(folderId); @@ -1931,12 +1931,12 @@ QMessageFolderIdList CMTMEngine::filterMessageFoldersL(const QMessageFolderFilte if (pf->_comparatorType == QMessageFolderFilterPrivate::Equality) { QMessageDataComparator::EqualityComparator cmp(static_cast<QMessageDataComparator::EqualityComparator>(pf->_comparatorValue)); if (cmp == QMessageDataComparator::Equal) { - if (pf->_value.toString().length() > 0) { + if (pf->_value.toString().length() > idPrefix().length()) { ids = folderIdsByAccountId(QMessageAccountId(pf->_value.toString())); } } else { // NotEqual ids = allFolders(); - if (pf->_value.toString().length() > 0) { + if (pf->_value.toString().length() > idPrefix().length()) { QMessageFolderIdList ids2 = folderIdsByAccountId(QMessageAccountId(pf->_value.toString())); for (int i = 0; i < ids2.count(); i++) { ids.removeOne(ids2[i]); @@ -4798,7 +4798,7 @@ void CMessagesFindOperation::filterAndOrderMessages(const QMessageFilterPrivate: iNumberOfHandledFilters++; if (pf->_comparatorType == QMessageFilterPrivate::Equality) { // QMessageId QMessageDataComparator::EqualityComparator cmp(static_cast<QMessageDataComparator::EqualityComparator>(pf->_comparatorValue)); - if (!pf->_value.isNull() && pf->_value.toString().length() > 0) { + if (!pf->_value.isNull() && pf->_value.toString().length() > idPrefix().length()) { if (cmp == QMessageDataComparator::Equal) { long int messageId = stripIdPrefix(pf->_value.toString()).toLong(); CMsvEntry* pEntry = iOwner.retrieveCMsvEntryAndPushToCleanupStack(messageId); diff --git a/src/messaging/winhelpers.cpp b/src/messaging/winhelpers.cpp index b83e0a8987..e31367f442 100644 --- a/src/messaging/winhelpers.cpp +++ b/src/messaging/winhelpers.cpp @@ -82,6 +82,7 @@ #include "qmessageaccountfilter_p.h" #include "qmessageaccountsortorder_p.h" #include "qmessagestore_p.h" +#include "messagingutil_p.h" #include <QCoreApplication> #include <QDebug> @@ -91,25 +92,6 @@ #include <QTimer> #include <QMutexLocker> -QTM_BEGIN_NAMESPACE - -namespace WinHelpers { - QString addIdPrefix(const QString& id) - { - Q_ASSERT(!id.startsWith(QString(idPrefix))); - return QString(idPrefix) + id; - } - - QString stripIdPrefix(const QString& id) - { - Q_ASSERT(id.startsWith(QString(id))); - return id.right(id.length() - QString(idPrefix).length()); - } -} - -QTM_END_NAMESPACE - - #include <shlwapi.h> #include <shlguid.h> #include <tchar.h> diff --git a/src/messaging/winhelpers_p.h b/src/messaging/winhelpers_p.h index e7b80ed9c1..2fc5cf0b92 100644 --- a/src/messaging/winhelpers_p.h +++ b/src/messaging/winhelpers_p.h @@ -55,12 +55,6 @@ QTM_BEGIN_NAMESPACE -namespace WinHelpers { - QString addIdPrefix(const QString& id); - QString stripIdPrefix(const QString& id); - static const char* idPrefix = "WIN_"; -}; - QTM_END_NAMESPACE #ifndef _WIN32_WCE diff --git a/tests/auto/support/support_win.cpp b/tests/auto/support/support_win.cpp index fc7649051d..9f291fe791 100644 --- a/tests/auto/support/support_win.cpp +++ b/tests/auto/support/support_win.cpp @@ -58,6 +58,8 @@ #include <cemapi.h> #endif +#include <messagingutil_p.h> + // Missing definitions #ifndef PR_PST_CONFIG_FLAGS #define PR_PST_CONFIG_FLAGS PROP_TAG( PT_LONG, 0x6770 ) @@ -386,7 +388,7 @@ QMessageAccountId accountIdFromRecordKey(const QByteArray &recordKey) encodedIdStream << recordKey; } - return QMessageAccountId(QString("WIN_")+encodedId.toBase64()); + return QMessageAccountId(MessagingUtil::addIdPrefix(encodedId.toBase64())); } QMessageFolderId folderIdFromProperties(const QByteArray &recordKey, const QByteArray &entryId, const QByteArray &storeKey) @@ -407,7 +409,7 @@ QMessageFolderId folderIdFromProperties(const QByteArray &recordKey, const QByte #endif } - return QMessageFolderId(QString("WIN_") + encodedId.toBase64()); + return QMessageFolderId(MessagingUtil::addIdPrefix(encodedId.toBase64())); } QByteArray objectProperty(IMAPIProp *object, ULONG tag) |