From 431ebf8a616d7294030a6873e8f24c9e90d88268 Mon Sep 17 00:00:00 2001 From: Wolfgang Sourdeau Date: Tue, 27 Sep 2011 14:43:41 +0000 Subject: [PATCH 1/2] Monotone-Parent: 6388fc7676201a072c315af0fb36851a896f301f Monotone-Revision: 6ad0713108beb5244446e83f17724cf5b9cee560 Monotone-Author: wsourdeau@inverse.ca Monotone-Date: 2011-09-27T14:43:41 Monotone-Branch: ca.inverse.sogo --- ChangeLog | 5 +++++ OpenChange/MAPIStoreFSMessage.m | 4 +++- 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/ChangeLog b/ChangeLog index c9933b59e..cd8723c63 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,8 @@ +2011-09-27 Wolfgang Sourdeau + + * OpenChange/MAPIStoreFSMessage.m (-objectVersion): return + 0xff...fff when "version" does not exist in the object properties. + 2011-09-26 Wolfgang Sourdeau * OpenChange/MAPIStoreFolder.m diff --git a/OpenChange/MAPIStoreFSMessage.m b/OpenChange/MAPIStoreFSMessage.m index abf5ba568..4a915d926 100644 --- a/OpenChange/MAPIStoreFSMessage.m +++ b/OpenChange/MAPIStoreFSMessage.m @@ -89,7 +89,9 @@ Class NSNumberK; version = [[sogoObject properties] objectForKey: @"version"]; - return exchange_globcnt ([version unsignedLongLongValue]); + return (version + ? exchange_globcnt ([version unsignedLongLongValue]) + : 0xffffffffffffffff); } - (int) getProperty: (void **) data From fd2f5dfb67430ae7fcd53e8870c696eee06ff53e Mon Sep 17 00:00:00 2001 From: Wolfgang Sourdeau Date: Tue, 27 Sep 2011 14:44:53 +0000 Subject: [PATCH 2/2] Monotone-Parent: 6ad0713108beb5244446e83f17724cf5b9cee560 Monotone-Revision: e68f0a3422367e930eb3d030ebd4a65ee79e3581 Monotone-Author: wsourdeau@inverse.ca Monotone-Date: 2011-09-27T14:44:53 Monotone-Branch: ca.inverse.sogo --- ChangeLog | 5 +++++ OpenChange/MAPIStoreFolder.m | 17 ++++++++++++----- 2 files changed, 17 insertions(+), 5 deletions(-) diff --git a/ChangeLog b/ChangeLog index cd8723c63..448a73e93 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,5 +1,10 @@ 2011-09-27 Wolfgang Sourdeau + * OpenChange/MAPIStoreFolder.m + (-moveCopyMessagesWithMID:fromFolder:withMID:wantCopy:): ensure + the message URL exists in the MAPIStoreMapping, otherwise fail + with MAPISTORE_ERR_NOT_FOUND, to avoid a crash. + * OpenChange/MAPIStoreFSMessage.m (-objectVersion): return 0xff...fff when "version" does not exist in the object properties. diff --git a/OpenChange/MAPIStoreFolder.m b/OpenChange/MAPIStoreFolder.m index 3e60e4ee4..e758d3eb6 100644 --- a/OpenChange/MAPIStoreFolder.m +++ b/OpenChange/MAPIStoreFolder.m @@ -641,6 +641,7 @@ Class NSExceptionK, MAPIStoreFAIMessageK, MAPIStoreMessageTableK, MAPIStoreFAIMe int rc = MAPISTORE_SUCCESS; NSUInteger count; NSMutableArray *oldMessageURLs; + NSString *oldMessageURL; MAPIStoreMapping *mapping; if ([sourceFolder isKindOfClass: isa] @@ -651,11 +652,17 @@ Class NSExceptionK, MAPIStoreFAIMessageK, MAPIStoreMessageTableK, MAPIStoreFAIMe mapping = [[self context] mapping]; for (count = 0; rc == MAPISTORE_SUCCESS && count < midCount; count++) { - [oldMessageURLs addObject: [mapping urlFromID: srcMids[count]]]; - rc = [self moveCopyMessageWithMID: srcMids[count] - fromFolder: sourceFolder - withMID: targetMids[count] - wantCopy: wantCopy]; + oldMessageURL = [mapping urlFromID: srcMids[count]]; + if (oldMessageURL) + { + [oldMessageURLs addObject: oldMessageURL]; + rc = [self moveCopyMessageWithMID: srcMids[count] + fromFolder: sourceFolder + withMID: targetMids[count] + wantCopy: wantCopy]; + } + else + rc = MAPISTORE_ERR_NOT_FOUND; } /* Notifications */