summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAleksW <qt-info@nokia.com>2010-04-14 17:59:36 +1000
committerDon Sanders <don.sanders@nokia.com>2010-04-22 19:04:41 +1000
commit15b6caa0e85a0688d312655882ea2c0accce4b77 (patch)
tree97d773e5c0199ce5145a66c713692225f6fe6170
parent3aa434d64aa27beb28948d9fc705528601d14411 (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.cpp15
-rw-r--r--src/messaging/qmessageaccountid_symbian.cpp2
-rw-r--r--src/messaging/qmessageaccountid_win.cpp7
-rw-r--r--src/messaging/qmessagecontentcontainer_p.h7
-rw-r--r--src/messaging/qmessagecontentcontainerid_win.cpp5
-rw-r--r--src/messaging/qmessagefolderid_symbian.cpp2
-rw-r--r--src/messaging/qmessagefolderid_win.cpp7
-rw-r--r--src/messaging/qmessageid_symbian.cpp2
-rw-r--r--src/messaging/qmessageid_win.cpp8
-rw-r--r--src/messaging/qmtmengine_symbian.cpp8
-rw-r--r--src/messaging/winhelpers.cpp20
-rw-r--r--src/messaging/winhelpers_p.h6
-rw-r--r--tests/auto/support/support_win.cpp6
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)