@@ -93,6 +93,7 @@ -(void) swizzled_queueLogMessage:(DDLogMessage*) logMessage asynchronously:(BOOL
93
93
static NSObject* _suspensionHandling_lock = nil;
94
94
static BOOL _suspensionHandling_isSuspended = NO;
95
95
static NSMutableDictionary* _versionInfoCache;
96
+ static NSCharacterSet* _invalidXMLCharacters;
96
97
static MLStreamRedirect* _stdoutRedirector = nil;
97
98
static MLStreamRedirect* _stderrRedirector = nil;
98
99
static volatile void (*_oldExceptionHandler)(NSException*) = NULL;
@@ -378,6 +379,25 @@ +(void) initialize
378
379
u_int32_t i = arc4random();
379
380
_processID = [self hexadecimalString:[NSData dataWithBytes:&i length:sizeof(i)]];
380
381
382
+ //values taken from https://www.w3.org/TR/2008/REC-xml-20081126/#charsets
383
+ NSMutableCharacterSet* validXMLCharacters = [NSMutableCharacterSet characterSetWithCharactersInString:@"\t\n\r"]; // #x9, #xA, #xD
384
+ [validXMLCharacters formUnionWithCharacterSet:[NSCharacterSet characterSetWithRange:NSMakeRange(0x20, 0xD7FF - 0x20 + 1)]];
385
+ [validXMLCharacters formUnionWithCharacterSet:[NSCharacterSet characterSetWithRange:NSMakeRange(0xE000, 0xFFFD - 0xE000 + 1)]];
386
+ [validXMLCharacters formUnionWithCharacterSet:[NSCharacterSet characterSetWithRange:NSMakeRange(0x10000, 0x10FFFF - 0x10000 + 1)]];
387
+
388
+ NSMutableString* notRecommendedXMLCharacters = [NSMutableString new];
389
+ for(unichar i = 0x007F; i <= 0x0084; i++)
390
+ [notRecommendedXMLCharacters appendFormat:@"%C", i];
391
+
392
+ for(unichar i = 0x0086; i <= 0x009F; i++)
393
+ [notRecommendedXMLCharacters appendFormat:@"%C", i];
394
+
395
+ for(unichar i = 0xFDD0; i <= 0xFDEF; i++)
396
+ [notRecommendedXMLCharacters appendFormat:@"%C", i];
397
+
398
+ [validXMLCharacters removeCharactersInString:notRecommendedXMLCharacters];
399
+ _invalidXMLCharacters = [validXMLCharacters invertedSet];
400
+
381
401
//shamelessly stolen from utils.ip in conversations source
382
402
IPV4 = [NSRegularExpression regularExpressionWithPattern:@"\\A(25[0-5]|2[0-4]\\d|[0-1]?\\d?\\d)(\\.(25[0-5]|2[0-4]\\d|[0-1]?\\d?\\d)){3}\\z" options:0 error:nil];
383
403
IPV6_HEX4DECCOMPRESSED = [NSRegularExpression regularExpressionWithPattern:@"\\A((?:[0-9A-Fa-f]{1,4}(?::[0-9A-Fa-f]{1,4})*)?) ::((?:[0-9A-Fa-f]{1,4}:)*)(25[0-5]|2[0-4]\\d|[0-1]?\\d?\\d)(\\.(25[0-5]|2[0-4]\\d|[0-1]?\\d?\\d)){3}\\z" options:0 error:nil];
@@ -2913,6 +2933,11 @@ +(NSArray*) splitString:(NSString*) string withSeparator:(NSString*) separator a
2913
2933
return result;
2914
2934
}
2915
2935
2936
+ +(NSString*) removeInvalidXMLCharactersFromString:(NSString*) inputString
2937
+ {
2938
+ return [[inputString componentsSeparatedByCharactersInSet:_invalidXMLCharacters] componentsJoinedByString:@""];
2939
+ }
2940
+
2916
2941
//see https://nachtimwald.com/2017/04/02/constant-time-string-comparison-in-c/
2917
2942
+(BOOL) constantTimeCompareAttackerString:(NSString* _Nonnull) str1 withKnownString:(NSString* _Nonnull) str2
2918
2943
{
0 commit comments