diff --git a/SoObjects/SOGo/NSString+Utilities.m b/SoObjects/SOGo/NSString+Utilities.m index 068a50817..14085eead 100644 --- a/SoObjects/SOGo/NSString+Utilities.m +++ b/SoObjects/SOGo/NSString+Utilities.m @@ -302,7 +302,8 @@ static int cssEscapingCount; { c = buf[i]; - if (c == 0x9 || + if (c == 0x0 || + c == 0x9 || c == 0xA || c == 0xD || (c >= 0x20 && c <= 0xD7FF) || diff --git a/UI/MailPartViewers/UIxMailPartHTMLViewer.m b/UI/MailPartViewers/UIxMailPartHTMLViewer.m index 059564b65..f5939b6f3 100644 --- a/UI/MailPartViewers/UIxMailPartHTMLViewer.m +++ b/UI/MailPartViewers/UIxMailPartHTMLViewer.m @@ -28,6 +28,7 @@ #include +#import #import #import @@ -908,6 +909,8 @@ static NSData* _sanitizeContent(NSData *theData) NSObject *parser; NSData *preparsedContent; SOGoMailObject *mail; + NSString *s; + xmlCharEncoding enc; mail = [self clientObject]; @@ -926,8 +929,6 @@ static NSData* _sanitizeContent(NSData *theData) enc = [self _xmlCharEncoding]; if (enc == XML_CHAR_ENCODING_ERROR) { - NSString *s; - s = [NSString stringWithData: preparsedContent usingEncodingNamed: [[bodyInfo objectForKey:@"parameterList"] objectForKey: @"charset"]]; @@ -954,6 +955,14 @@ static NSData* _sanitizeContent(NSData *theData) #endif } + // Let's sanitize the string to make sure libxml doesn't go havoc + if (enc == XML_CHAR_ENCODING_UTF8) + { + s = [[NSString alloc] initWithData: preparsedContent encoding: NSUTF8StringEncoding]; + preparsedContent = [[s safeString] dataUsingEncoding: NSUTF8StringEncoding]; + RELEASE(s); + } + [handler setContentEncoding: enc]; [parser setContentHandler: handler];