diff options
author | Maksim Bauer <m.bauer@zertificon.com> | 2014-08-01 13:02:10 +0200 |
---|---|---|
committer | Maksim Bauer <m.bauer@zertificon.com> | 2014-08-01 13:02:10 +0200 |
commit | 19e87b40bd40b6fc6cf7607763bf22500122765c (patch) | |
tree | 6328cde6e3902609eac6dca2b0504b3db5c06807 /src/core | |
parent | a54b838b7f14055716b4da64ea18c5652136d052 (diff) | |
parent | 6f5f44ff92337b6f34e6f6d10d9135661b164b0c (diff) |
Merge remote-tracking branch 'upstream/master'
Conflicts:
src/objc/abstract/MCOAbstractPart.h
Diffstat (limited to 'src/core')
-rw-r--r-- | src/core/basetypes/MCString.cc | 16 | ||||
-rw-r--r-- | src/core/basetypes/MCUtils.h | 2 | ||||
-rw-r--r-- | src/core/renderer/MCHTMLRenderer.cc | 18 |
3 files changed, 32 insertions, 4 deletions
diff --git a/src/core/basetypes/MCString.cc b/src/core/basetypes/MCString.cc index 64ec81cc..5c2da323 100644 --- a/src/core/basetypes/MCString.cc +++ b/src/core/basetypes/MCString.cc @@ -761,6 +761,9 @@ String * String::string() String * String::stringWithData(Data * data, const char * charset) { + if (data == NULL) { + return String::string(); + } String * result = NULL; result = new String(data->bytes(), data->length(), charset); result->autorelease(); @@ -807,6 +810,9 @@ String * String::stringWithCharacters(const UChar * characters, unsigned int len void String::appendCharactersLength(const UChar * unicodeCharacters, unsigned int length) { + if (unicodeCharacters == NULL) { + return; + } allocate(mLength + length); u_strncpy(&mUnicodeChars[mLength], unicodeCharacters, length); mLength += length; @@ -815,6 +821,9 @@ void String::appendCharactersLength(const UChar * unicodeCharacters, unsigned in void String::appendString(String * otherString) { + if (otherString == NULL) { + return; + } appendCharactersLength(otherString->unicodeCharacters(), otherString->length()); } @@ -831,8 +840,9 @@ void String::appendUTF8Format(const char * format, ...) void String::appendUTF8CharactersLength(const char * UTF8Characters, unsigned int length) { - if (UTF8Characters == NULL) + if (UTF8Characters == NULL) { return; + } UChar * dest; int32_t destLength; @@ -1124,6 +1134,10 @@ String * String::uppercaseString() void String::appendBytes(const char * bytes, unsigned int length, const char * charset) { + if (bytes == NULL) { + return; + } + #if __APPLE__ CFStringEncoding encoding; if (strcasecmp(charset, "mutf-7") == 0) { diff --git a/src/core/basetypes/MCUtils.h b/src/core/basetypes/MCUtils.h index e1bef841..ad9c4db5 100644 --- a/src/core/basetypes/MCUtils.h +++ b/src/core/basetypes/MCUtils.h @@ -29,7 +29,7 @@ #define MCSTR(str) mailcore::String::uniquedStringWithUTF8Characters("" str "") -#define MCUTF8(str) ((str) != NULL ? (str)->UTF8Characters() : NULL ) +#define MCUTF8(str) MCUTF8DESC(str) #define MCUTF8DESC(obj) ((obj) != NULL ? (obj)->description()->UTF8Characters() : NULL ) #define MCLOCALIZEDSTRING(key) key diff --git a/src/core/renderer/MCHTMLRenderer.cc b/src/core/renderer/MCHTMLRenderer.cc index 15f6ade3..8b561e71 100644 --- a/src/core/renderer/MCHTMLRenderer.cc +++ b/src/core/renderer/MCHTMLRenderer.cc @@ -407,8 +407,22 @@ String * htmlForAbstractMultipartAlternative(AbstractMultipart * part, htmlRende AbstractPart * preferredAlternative = preferredPartInMultipartAlternative(part); if (preferredAlternative == NULL) return MCSTR(""); - - return htmlForAbstractPart(preferredAlternative, context); + + // Exchange sends calendar invitation as alternative part. We need to extract it. + AbstractPart * calendar = NULL; + for(unsigned int i = 0 ; i < part->parts()->count() ; i ++) { + AbstractPart * subpart = (AbstractPart *) part->parts()->objectAtIndex(i); + if (partContainsMimeType(subpart, MCSTR("text/calendar"))) { + calendar = subpart; + } + } + + String * result = String::string(); + result->appendString(htmlForAbstractPart(preferredAlternative, context)); + if (calendar != NULL) { + result->appendString(htmlForAbstractPart(calendar, context)); + } + return result; } static String * htmlForAbstractMultipartMixed(AbstractMultipart * part, htmlRendererContext * context) |