aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/core
diff options
context:
space:
mode:
authorGravatar Maksim Bauer <m.bauer@zertificon.com>2014-08-01 13:02:10 +0200
committerGravatar Maksim Bauer <m.bauer@zertificon.com>2014-08-01 13:02:10 +0200
commit19e87b40bd40b6fc6cf7607763bf22500122765c (patch)
tree6328cde6e3902609eac6dca2b0504b3db5c06807 /src/core
parenta54b838b7f14055716b4da64ea18c5652136d052 (diff)
parent6f5f44ff92337b6f34e6f6d10d9135661b164b0c (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.cc16
-rw-r--r--src/core/basetypes/MCUtils.h2
-rw-r--r--src/core/renderer/MCHTMLRenderer.cc18
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)