From c9e7eac3fd7cfa4354c19c55d967526fe445e030 Mon Sep 17 00:00:00 2001 From: Ludovic Marcotte Date: Thu, 11 Feb 2016 14:33:39 -0500 Subject: [PATCH] (fix) EAS issue with attachments in 2nd-level mailboxes (fixes #3505) --- ActiveSync/SOGoActiveSyncDispatcher.m | 38 ++++++++++++++------------- 1 file changed, 20 insertions(+), 18 deletions(-) diff --git a/ActiveSync/SOGoActiveSyncDispatcher.m b/ActiveSync/SOGoActiveSyncDispatcher.m index 215fccf36..ea9739b62 100644 --- a/ActiveSync/SOGoActiveSyncDispatcher.m +++ b/ActiveSync/SOGoActiveSyncDispatcher.m @@ -1172,17 +1172,18 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. SOGoMailAccounts *accountsFolder; SOGoUserFolder *userFolder; SOGoMailObject *mailObject; + NSMutableArray *a; NSArray *partKeys; int p; - NSRange r1, r2; - r1 = [realCollectionId rangeOfString: @"/"]; - r2 = [realCollectionId rangeOfString: @"/" options: 0 range: NSMakeRange(NSMaxRange(r1)+1, [realCollectionId length]-NSMaxRange(r1)-1)]; - - folderName = [realCollectionId substringToIndex: r1.location]; - messageName = [realCollectionId substringWithRange: NSMakeRange(NSMaxRange(r1), r2.location-r1.location-1)]; - pathToPart = [realCollectionId substringFromIndex: r2.location+1]; + a = [[realCollectionId componentsSeparatedByString: @"/"] mutableCopy]; + [a autorelease] + pathToPart = [a lastObject]; + [a removeLastObject]; + messageName = [a lastObject]; + [a removeLastObject]; + folderName = [a componentsJoinedByString: @"/"]; userFolder = [[context activeUser] homeFolderInContext: context]; accountsFolder = [userFolder lookupName: @"Mail" inContext: context acquire: NO]; @@ -1379,20 +1380,21 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. SOGoMailAccounts *accountsFolder; SOGoUserFolder *userFolder; SOGoMailObject *mailObject; + NSMutableArray *a; if ([fileReference length]) { // fetch attachment - NSRange r1, r2; NSArray *partKeys; int p; - r1 = [realCollectionId rangeOfString: @"/"]; - r2 = [realCollectionId rangeOfString: @"/" options: 0 range: NSMakeRange(NSMaxRange(r1)+1, [realCollectionId length]-NSMaxRange(r1)-1)]; - - folderName = [realCollectionId substringToIndex: r1.location]; - messageName = [realCollectionId substringWithRange: NSMakeRange(NSMaxRange(r1), r2.location-r1.location-1)]; - pathToPart = [realCollectionId substringFromIndex: r2.location+1]; + a = [[realCollectionId componentsSeparatedByString: @"/"] mutableCopy]; + [a autorelease] + pathToPart = [a lastObject]; + [a removeLastObject]; + messageName = [a lastObject]; + [a removeLastObject]; + folderName = [a componentsJoinedByString: @"/"]; userFolder = [[context activeUser] homeFolderInContext: context]; accountsFolder = [userFolder lookupName: @"Mail" inContext: context acquire: NO]; @@ -1408,13 +1410,13 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. currentBodyPart = [mailObject lookupImap4BodyPartKey: [partKeys objectAtIndex:0] inContext: context]; for (p = 1; p < [partKeys count]; p++) - { - currentBodyPart = [currentBodyPart lookupImap4BodyPartKey: [partKeys objectAtIndex:p] inContext: context]; - } + { + currentBodyPart = [currentBodyPart lookupImap4BodyPartKey: [partKeys objectAtIndex:p] inContext: context]; + } [s appendString: @""]; [s appendString: @"1"]; - [s appendFormat: @"%@", fileReference]; + [s appendFormat: @"mail/%@/%@/%@", [folderName stringByEscapingURL], messageName, pathToPart]; [s appendString: @""]; [s appendFormat: @"%@/%@", [[currentBodyPart partInfo] objectForKey: @"type"], [[currentBodyPart partInfo] objectForKey: @"subtype"]];