From 0c096356c056142a151ee193610ab8a56a53d6ae Mon Sep 17 00:00:00 2001 From: Matt Ronge Date: Thu, 28 Feb 2013 14:31:29 -0600 Subject: [PATCH] More error handling when fetching message body --- Source/CTCoreMessage.m | 55 ++++++++++++++++++++++++++++++------------ 1 file changed, 39 insertions(+), 16 deletions(-) diff --git a/Source/CTCoreMessage.m b/Source/CTCoreMessage.m index 5b2809b..7d09833 100644 --- a/Source/CTCoreMessage.m +++ b/Source/CTCoreMessage.m @@ -151,7 +151,10 @@ - (NSString *)body { [self fetchBodyStructure]; } NSMutableString *result = [NSMutableString string]; - [self _buildUpBodyText:myParsedMIME result:result]; + BOOL success = [self _buildUpBodyText:myParsedMIME result:result]; + if (!success) { + return nil; + } return result; } @@ -181,7 +184,10 @@ - (NSString *)htmlBody { [self fetchBodyStructure]; } NSMutableString *result = [NSMutableString string]; - [self _buildUpHtmlBodyText:myParsedMIME result:result]; + BOOL success = [self _buildUpHtmlBodyText:myParsedMIME result:result]; + if (!success) { + return nil; + } return result; } @@ -196,20 +202,24 @@ - (NSString *)bodyPreferringPlainText:(BOOL *)isHTML { } -- (void)_buildUpBodyText:(CTMIME *)mime result:(NSMutableString *)result { +- (BOOL)_buildUpBodyText:(CTMIME *)mime result:(NSMutableString *)result { if (mime == nil) - return; + return NO; if ([mime isKindOfClass:[CTMIME_MessagePart class]]) { - [self _buildUpBodyText:[mime content] result:result]; + return [self _buildUpBodyText:[mime content] result:result]; } else if ([mime isKindOfClass:[CTMIME_TextPart class]]) { if ([[mime.contentType lowercaseString] rangeOfString:@"text/plain"].location != NSNotFound) { - [(CTMIME_TextPart *)mime fetchPart]; + BOOL success = [(CTMIME_TextPart *)mime fetchPart]; + if (!success) { + return NO; + } NSString* y = [mime content]; - if(y != nil) { - [result appendString:y]; + if(y == nil) { + return NO; } + [result appendString:y]; } } else if ([mime isKindOfClass:[CTMIME_MultiPart class]]) { @@ -217,25 +227,34 @@ - (void)_buildUpBodyText:(CTMIME *)mime result:(NSMutableString *)result { NSEnumerator *enumer = [[mime content] objectEnumerator]; CTMIME *subpart; while ((subpart = [enumer nextObject])) { - [self _buildUpBodyText:subpart result:result]; + BOOL success = [self _buildUpBodyText:subpart result:result]; + if (!success) { + return NO; + } } } + return YES; } -- (void)_buildUpHtmlBodyText:(CTMIME *)mime result:(NSMutableString *)result { +- (BOOL)_buildUpHtmlBodyText:(CTMIME *)mime result:(NSMutableString *)result { if (mime == nil) - return; + return NO; if ([mime isKindOfClass:[CTMIME_MessagePart class]]) { - [self _buildUpHtmlBodyText:[mime content] result:result]; + return [self _buildUpHtmlBodyText:[mime content] result:result]; } else if ([mime isKindOfClass:[CTMIME_TextPart class]]) { if ([[mime.contentType lowercaseString] rangeOfString:@"text/html"].location != NSNotFound) { - [(CTMIME_TextPart *)mime fetchPart]; + BOOL success = [(CTMIME_TextPart *)mime fetchPart]; + if (!success) { + return NO; + } + NSString* y = [mime content]; - if(y != nil) { - [result appendString:y]; + if(y == nil) { + return NO; } + [result appendString:y]; } } else if ([mime isKindOfClass:[CTMIME_MultiPart class]]) { @@ -243,9 +262,13 @@ - (void)_buildUpHtmlBodyText:(CTMIME *)mime result:(NSMutableString *)result { NSEnumerator *enumer = [[mime content] objectEnumerator]; CTMIME *subpart; while ((subpart = [enumer nextObject])) { - [self _buildUpHtmlBodyText:subpart result:result]; + BOOL success = [self _buildUpHtmlBodyText:subpart result:result]; + if (!success) { + return NO; + } } } + return YES; }