diff --git a/ActiveSync/SOGoMailObject+ActiveSync.m b/ActiveSync/SOGoMailObject+ActiveSync.m index 0eb08b2ec..49eb8dc29 100644 --- a/ActiveSync/SOGoMailObject+ActiveSync.m +++ b/ActiveSync/SOGoMailObject+ActiveSync.m @@ -272,10 +272,14 @@ struct GlobalObjectId { charset = [[[self lookupInfoForBodyPart: key] objectForKey: @"parameterList"] objectForKey: @"charset"]; if (![charset length]) - charset = @"us-ascii"; + charset = @"utf-8"; s = [NSString stringWithData: d usingEncodingNamed: charset]; + // We fallback to ISO-8859-1 string encoding + if (!s) + s = [[[NSString alloc] initWithData: d encoding: NSISOLatin1StringEncoding] autorelease]; + if (theType == 1 && *theNativeTypeFound == 2) s = [s htmlToText]; @@ -323,7 +327,7 @@ struct GlobalObjectId { [[[thePart contentType] type] isEqualToString: @"text"] && ([[[thePart contentType] subType] isEqualToString: @"plain"] || [[[thePart contentType] subType] isEqualToString: @"html"])) { - // We make sure everything is encoded in UTF-8 + // We make sure everything is encoded in UTF-8. NGMimeType *mimeType; NSString *s; @@ -334,9 +338,13 @@ struct GlobalObjectId { charset = [[thePart contentType] valueOfParameter: @"charset"]; if (![charset length]) - charset = @"us-ascii"; + charset = @"utf-8"; - s = [NSString stringWithData: body usingEncodingNamed: charset]; + s = [NSString stringWithData: body usingEncodingNamed: charset]; + + // We fallback to ISO-8859-1 string encoding. We avoid #3103. + if (!s) + s = [[[NSString alloc] initWithData: d encoding: NSISOLatin1StringEncoding] autorelease]; } else { @@ -439,7 +447,7 @@ struct GlobalObjectId { charset = [[[self lookupInfoForBodyPart: @""] objectForKey: @"parameterList"] objectForKey: @"charset"]; if (![charset length]) - charset = @"us-ascii"; + charset = @"utf-8"; d = [[self fetchPlainTextParts] objectForKey: @""]; @@ -453,6 +461,10 @@ struct GlobalObjectId { d = [d dataByDecodingQuotedPrintableTransferEncoding]; s = [NSString stringWithData: d usingEncodingNamed: charset]; + + // We fallback to ISO-8859-1 string encoding. We avoid #3103. + if (!s) + s = [[[NSString alloc] initWithData: d encoding: NSISOLatin1StringEncoding] autorelease]; // Check if we must convert html->plain if (theType == 1 && [subtype isEqualToString: @"html"]) diff --git a/NEWS b/NEWS index ee919af3e..505731fe3 100644 --- a/NEWS +++ b/NEWS @@ -21,6 +21,7 @@ Bug fixes - fixed fetching of freebusy data from the Web interface - fixed EAS handling of Bcc in emails (#3138) - fixed Language-Region tags in Web interface (#3121) + - properly fallback over EAS to UTF-8 and then Latin1 for messages w/o charset (#3103) 2.2.16 (2015-02-12) -------------------