diff --git a/ActiveSync/NSString+ActiveSync.m b/ActiveSync/NSString+ActiveSync.m index 5b0ed646d..b744bfca2 100644 --- a/ActiveSync/NSString+ActiveSync.m +++ b/ActiveSync/NSString+ActiveSync.m @@ -62,7 +62,7 @@ static NSArray *easCommandParameters = nil; - (NSString *) activeSyncRepresentationInContext: (WOContext *) context { - return [self safeStringByEscapingXMLString]; + return [self safeStringByEscapingXMLString: YES]; } - (int) activeSyncFolderType diff --git a/SoObjects/SOGo/NSString+Utilities.h b/SoObjects/SOGo/NSString+Utilities.h index bed244bb2..d6b6e278f 100644 --- a/SoObjects/SOGo/NSString+Utilities.h +++ b/SoObjects/SOGo/NSString+Utilities.h @@ -55,6 +55,7 @@ /* Unicode safety */ - (NSString *) safeString; - (NSString *) safeStringByEscapingXMLString; +- (NSString *) safeStringByEscapingXMLString: (BOOL) encodeCR; /* JSON */ - (NSString *) jsonRepresentation; diff --git a/SoObjects/SOGo/NSString+Utilities.m b/SoObjects/SOGo/NSString+Utilities.m index a2cffdc38..068a50817 100644 --- a/SoObjects/SOGo/NSString+Utilities.m +++ b/SoObjects/SOGo/NSString+Utilities.m @@ -319,7 +319,10 @@ static int cssEscapingCount; return AUTORELEASE(s); } - +- (NSString *) safeStringByEscapingXMLString +{ + return [self safeStringByEscapingXMLString: NO]; +} // // This is a copy from NSString+XMLEscaping.m from SOPE. // The difference here is that we use wchar_t instead of unichar. @@ -330,7 +333,8 @@ static int cssEscapingCount; // We avoid naming it like the one in SOPE since if the ActiveSync // bundle is loaded, it'll overwrite the one provided by SOPE. // -- (NSString *) safeStringByEscapingXMLString { +- (NSString *) safeStringByEscapingXMLString: (BOOL) encoreCR +{ register unsigned i, len, j; register wchar_t *buf; const wchar_t *chars; @@ -379,7 +383,13 @@ static int cssEscapingCount; buf[j] = '&'; j++; buf[j] = 'g'; j++; buf[j] = 't'; j++; buf[j] = ';'; j++; break; - + case '\r': + if (encoreCR) // falls back to default if we don't encode + { + buf[j] = '&'; j++; buf[j] = '#'; j++; buf[j] = '1'; j++; + buf[j] = '3'; j++; buf[j] = ';'; j++; + break; + } default: /* escape big chars */ if (chars[i] > 127) {