diff --git a/SoObjects/SOGo/NSString+Utilities.m b/SoObjects/SOGo/NSString+Utilities.m index 441d471eb..9e5898a15 100644 --- a/SoObjects/SOGo/NSString+Utilities.m +++ b/SoObjects/SOGo/NSString+Utilities.m @@ -942,12 +942,13 @@ static int cssEscapingCount; NSScanner *theScanner; NSError *error; NSUInteger numberOfMatches; - NSRegularExpression *regex; + NSRegularExpression *regex, *importRegex; text = nil; error = nil; result = [NSString stringWithString: self]; regex = nil; + importRegex = nil; NS_DURING { @@ -1056,9 +1057,9 @@ static int cssEscapingCount; result = [NSString stringWithString: newResult]; // Remove @import css (in style tags) - regex = [NSRegularExpression regularExpressionWithPattern:@"(<[\\s\\u200B \\\\0]*s[\\s\\u200B \\\\0]*t[\\s\\u200B \\\\0]*y[\\s\\u200B \\\\0]*l[\\s\\u200B \\\\0]*e.*)([\\s\\u200B \\\\0]*@[\\s\\u200B \\\\0]*i[\\s\\u200B \\\\0]*m[\\s\\u200B \\\\0]*p[\\s\\u200B \\\\0]*o[\\s\\u200B \\\\0]*r[\\s\\u200B \\\\0]*t)(.*<[\\s\\u200B \\\\0]*\\/[\\s\\u200B \\\\0]*s[\\s\\u200B \\\\0]*t[\\s\\u200B \\\\0]*y[\\s\\u200B \\\\0]*l[\\s\\u200B \\\\0]*e[\\s\\u200B \\\\0]*>)" + importRegex = [NSRegularExpression regularExpressionWithPattern:@"(<[\\s\\u200B \\\\0]*s[\\s\\u200B \\\\0]*t[\\s\\u200B \\\\0]*y[\\s\\u200B \\\\0]*l[\\s\\u200B \\\\0]*e.*)([\\s\\u200B \\\\0]*@[\\s\\u200B \\\\0]*i[\\s\\u200B \\\\0]*m[\\s\\u200B \\\\0]*p[\\s\\u200B \\\\0]*o[\\s\\u200B \\\\0]*r[\\s\\u200B \\\\0]*t)(.*<[\\s\\u200B \\\\0]*\\/[\\s\\u200B \\\\0]*s[\\s\\u200B \\\\0]*t[\\s\\u200B \\\\0]*y[\\s\\u200B \\\\0]*l[\\s\\u200B \\\\0]*e[\\s\\u200B \\\\0]*>)" options: NSRegularExpressionCaseInsensitive error:&error]; - newResult = [regex stringByReplacingMatchesInString:result options:0 range:NSMakeRange(0, [result length]) withTemplate:@"onrep***="]; + newResult = [importRegex stringByReplacingMatchesInString:result options:0 range:NSMakeRange(0, [result length]) withTemplate:@"$1@im****$3"]; result = [NSString stringWithString: newResult]; @@ -1075,8 +1076,8 @@ static int cssEscapingCount; } newResult = result; - while([regex numberOfMatchesInString:newResult options:0 range:NSMakeRange(0, [newResult length])] > 0) { - newResult = [regex stringByReplacingMatchesInString:newResult options:0 range:NSMakeRange(0, [newResult length]) withTemplate:@"$1@im****$3"]; + while([importRegex numberOfMatchesInString:newResult options:0 range:NSMakeRange(0, [newResult length])] > 0) { + newResult = [importRegex stringByReplacingMatchesInString:newResult options:0 range:NSMakeRange(0, [newResult length]) withTemplate:@"$1@im****$3"]; } result = [NSString stringWithString: newResult]; } diff --git a/Tests/Unit/TestNSString+Utilities.m b/Tests/Unit/TestNSString+Utilities.m index 94efa8db9..fdddf10f1 100644 --- a/Tests/Unit/TestNSString+Utilities.m +++ b/Tests/Unit/TestNSString+Utilities.m @@ -110,6 +110,8 @@ testEquals([[NSString stringWithString:@"foobar
ABC
"] stringWithoutHTMLInjection: NO stripAngular: NO], @"
ABC
"); + // the @import cleanup must still run when angular interpolation is stripped as well + testEquals([[NSString stringWithString:@""] stringWithoutHTMLInjection: NO stripAngular: YES], @""); } - (void) test_stringCleanInvalidHTMLTags diff --git a/UI/MailPartViewers/UIxMailPartICalViewer.h b/UI/MailPartViewers/UIxMailPartICalViewer.h index 1ffde026e..dada2cb3e 100644 --- a/UI/MailPartViewers/UIxMailPartICalViewer.h +++ b/UI/MailPartViewers/UIxMailPartICalViewer.h @@ -46,6 +46,9 @@ - (BOOL) isEndDateOnSameDay; - (BOOL) hasLocation; - (NSString *)location; +- (NSString *) organizerHref; +- (NSString *) userComment; +- (NSString *) eventDescription; @end diff --git a/UI/MailPartViewers/UIxMailPartICalViewer.m b/UI/MailPartViewers/UIxMailPartICalViewer.m index f7cba20fd..6d214485e 100644 --- a/UI/MailPartViewers/UIxMailPartICalViewer.m +++ b/UI/MailPartViewers/UIxMailPartICalViewer.m @@ -32,6 +32,7 @@ #import #import +#import #import @@ -417,6 +418,18 @@ return YES; } +- (NSString *) organizerHref +{ + NSString *address; + + address = [[[self inEvent] organizer] rfc822Email]; + if (![address length]) + return nil; + + return [[NSString stringWithFormat: @"mailto:%@", address] + stringByEscapingHTMLAttributeValue]; +} + - (NSString *) organizerDisplayName { iCalPerson *organizer; @@ -612,4 +625,14 @@ return [[self inEvent] location]; } +- (NSString *) userComment +{ + return [[[self inEvent] userComment] stringByEscapingHTMLString]; +} + +- (NSString *) eventDescription +{ + return [[[self authorativeEvent] comment] stringByEscapingHTMLString]; +} + @end /* UIxMailPartICalViewer */ diff --git a/UI/MailPartViewers/UIxMailPartViewer.h b/UI/MailPartViewers/UIxMailPartViewer.h index 0cb3622e3..7a3c230c2 100644 --- a/UI/MailPartViewers/UIxMailPartViewer.h +++ b/UI/MailPartViewers/UIxMailPartViewer.h @@ -86,6 +86,7 @@ - (NSString *)preferredPathExtension; - (NSString *)filename; - (NSString *)filenameForDisplay; +- (NSString *)filenameForTitle; - (NSFormatter *)sizeFormatter; /* caches */ diff --git a/UI/MailPartViewers/UIxMailPartViewer.m b/UI/MailPartViewers/UIxMailPartViewer.m index 38e80422f..0501908c9 100644 --- a/UI/MailPartViewers/UIxMailPartViewer.m +++ b/UI/MailPartViewers/UIxMailPartViewer.m @@ -340,6 +340,14 @@ : (id)@"untitled"; } +- (NSString *) filenameForTitle +{ + /* the generic attribute writer escapes & but not the quote, so a quote in the + filename would end the title attribute and start a new one */ + return [[self filenameForDisplay] stringByReplacingOccurrencesOfString: @"\"" + withString: @""]; +} + - (NSFormatter *) sizeFormatter { return [UIxMailSizeFormatter sharedMailSizeFormatter]; diff --git a/UI/Templates/MailPartViewers/UIxMailPartICalViewer.wox b/UI/Templates/MailPartViewers/UIxMailPartICalViewer.wox index 873554c04..d18f5c8db 100644 --- a/UI/Templates/MailPartViewers/UIxMailPartICalViewer.wox +++ b/UI/Templates/MailPartViewers/UIxMailPartICalViewer.wox @@ -17,7 +17,7 @@ -
+
@@ -137,7 +137,7 @@

-

@@ -147,7 +147,7 @@

- + @@ -233,14 +233,14 @@ - +

-
+
- +
@@ -251,7 +251,7 @@
-
+
@@ -268,7 +268,7 @@
-
+
@@ -294,14 +294,14 @@
- +
- +
diff --git a/UI/Templates/MailPartViewers/UIxMailPartImageViewer.wox b/UI/Templates/MailPartViewers/UIxMailPartImageViewer.wox index 29c8b57ea..62fb6d8ce 100644 --- a/UI/Templates/MailPartViewers/UIxMailPartImageViewer.wox +++ b/UI/Templates/MailPartViewers/UIxMailPartImageViewer.wox @@ -10,7 +10,7 @@ -

+

diff --git a/UI/Templates/MailPartViewers/UIxMailPartLinkViewer.wox b/UI/Templates/MailPartViewers/UIxMailPartLinkViewer.wox index 174dfbf08..1e5e749ca 100644 --- a/UI/Templates/MailPartViewers/UIxMailPartLinkViewer.wox +++ b/UI/Templates/MailPartViewers/UIxMailPartLinkViewer.wox @@ -6,7 +6,7 @@ xmlns:label="OGo:label"> -

+