ios/Mobile/AppDelegate.mm | 96 ++++++++++++++++++++++++++++++---------------- 1 file changed, 63 insertions(+), 33 deletions(-)
New commits: commit 2b8a06523df5283c07402910052e1558e79909bf Author: Tor Lillqvist <[email protected]> AuthorDate: Fri Apr 26 11:44:28 2019 +0300 Commit: Tor Lillqvist <[email protected]> CommitDate: Fri Apr 26 11:44:28 2019 +0300 tdf#124918: Don't crash on invalid URLs in the template list file diff --git a/ios/Mobile/AppDelegate.mm b/ios/Mobile/AppDelegate.mm index a92fcf782..a2722da89 100644 --- a/ios/Mobile/AppDelegate.mm +++ b/ios/Mobile/AppDelegate.mm @@ -102,51 +102,55 @@ static void updateTemplates(NSData *data, NSURLResponse *response) NSString *line = [NSString stringWithUTF8String:buf.data()]; NSURL *url = [NSURL URLWithString:line]; - NSString *baseName = [url lastPathComponent]; - - NSString *hash = [[NSData dataWithBytes:buf.data() length:length] base64EncodedStringWithOptions:0]; - [urlHashes addObject:hash]; - - NSString *directoryForTemplate = [downloadedTemplates stringByAppendingString:hash]; - - NSURL *fileForTemplate = [NSURL fileURLWithPath:[directoryForTemplate stringByAppendingString:[@"/" stringByAppendingString:baseName]]]; - - // If we have that template, check whether it is up-to-date - BOOL isDirectory; - if ([[NSFileManager defaultManager] fileExistsAtPath:directoryForTemplate isDirectory:&isDirectory] && - isDirectory) { - NSMutableURLRequest *req = [[NSURLRequest requestWithURL:url] mutableCopy]; - [req setHTTPMethod:@"HEAD"]; - [[[NSURLSession sharedSession] dataTaskWithRequest:req - completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) { - if (error == nil && [response isKindOfClass:[NSHTTPURLResponse class]] && [(NSHTTPURLResponse*)response statusCode] == 200) { - NSString *lastModified = [[(NSHTTPURLResponse*)response allHeaderFields] objectForKey:@"Last-Modified"]; - NSDateFormatter *df = [[NSDateFormatter alloc] init]; - df.dateFormat = @"EEE, dd MMM yyyy HH:mm:ss z"; - NSDate *templateDate = [df dateFromString:lastModified]; - - NSDate *cachedTemplateDate = [[[NSFileManager defaultManager] attributesOfItemAtPath:[fileForTemplate path] error:nil] objectForKey:NSFileModificationDate]; - - if ([templateDate compare:cachedTemplateDate] == NSOrderedDescending) { - downloadTemplate(url, fileForTemplate); + if (url == nil) + LOG_ERR("Invalid URL in template file: " << [line UTF8String]); + else { + NSString *baseName = [url lastPathComponent]; + + NSString *hash = [[NSData dataWithBytes:buf.data() length:length] base64EncodedStringWithOptions:0]; + [urlHashes addObject:hash]; + + NSString *directoryForTemplate = [downloadedTemplates stringByAppendingString:hash]; + + NSURL *fileForTemplate = [NSURL fileURLWithPath:[directoryForTemplate stringByAppendingString:[@"/" stringByAppendingString:baseName]]]; + + // If we have that template, check whether it is up-to-date + BOOL isDirectory; + if ([[NSFileManager defaultManager] fileExistsAtPath:directoryForTemplate isDirectory:&isDirectory] && + isDirectory) { + NSMutableURLRequest *req = [[NSURLRequest requestWithURL:url] mutableCopy]; + [req setHTTPMethod:@"HEAD"]; + [[[NSURLSession sharedSession] dataTaskWithRequest:req + completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) { + if (error == nil && [response isKindOfClass:[NSHTTPURLResponse class]] && [(NSHTTPURLResponse*)response statusCode] == 200) { + NSString *lastModified = [[(NSHTTPURLResponse*)response allHeaderFields] objectForKey:@"Last-Modified"]; + NSDateFormatter *df = [[NSDateFormatter alloc] init]; + df.dateFormat = @"EEE, dd MMM yyyy HH:mm:ss z"; + NSDate *templateDate = [df dateFromString:lastModified]; + + NSDate *cachedTemplateDate = [[[NSFileManager defaultManager] attributesOfItemAtPath:[fileForTemplate path] error:nil] objectForKey:NSFileModificationDate]; + + if ([templateDate compare:cachedTemplateDate] == NSOrderedDescending) { + downloadTemplate(url, fileForTemplate); + } + } else if (error == nil && [response isKindOfClass:[NSHTTPURLResponse class]]) { + LOG_ERR("Failed to get HEAD of " << + [[url absoluteString] UTF8String] << + ": response code " << [(NSHTTPURLResponse*)response statusCode]); + } else if (error != nil) { + LOG_ERR("Failed to get HEAD of " << + [[url absoluteString] UTF8String] << + ": " << [[error description] UTF8String]); + } else { + LOG_ERR("Failed to get HEAD of " << + [[url absoluteString] UTF8String]); } - } else if (error == nil && [response isKindOfClass:[NSHTTPURLResponse class]]) { - LOG_ERR("Failed to get HEAD of " << - [[url absoluteString] UTF8String] << - ": response code " << [(NSHTTPURLResponse*)response statusCode]); - } else if (error != nil) { - LOG_ERR("Failed to get HEAD of " << - [[url absoluteString] UTF8String] << - ": " << [[error description] UTF8String]); - } else { - LOG_ERR("Failed to get HEAD of " << - [[url absoluteString] UTF8String]); - } - }] resume]; - } else { - // Else download it. - [[NSFileManager defaultManager] createDirectoryAtPath:directoryForTemplate withIntermediateDirectories:YES attributes:nil error:nil]; - downloadTemplate(url, fileForTemplate); + }] resume]; + } else { + // Else download it. + [[NSFileManager defaultManager] createDirectoryAtPath:directoryForTemplate withIntermediateDirectories:YES attributes:nil error:nil]; + downloadTemplate(url, fileForTemplate); + } } } } commit 4d519aebc03d9a8a88ba1886236ed3b65f67bacf Author: Tor Lillqvist <[email protected]> AuthorDate: Fri Apr 26 11:28:39 2019 +0300 Commit: Tor Lillqvist <[email protected]> CommitDate: Fri Apr 26 11:28:39 2019 +0300 tdf#124918: More logging in template download error situations diff --git a/ios/Mobile/AppDelegate.mm b/ios/Mobile/AppDelegate.mm index aa9737cae..a92fcf782 100644 --- a/ios/Mobile/AppDelegate.mm +++ b/ios/Mobile/AppDelegate.mm @@ -49,6 +49,10 @@ static void download(NSURL *source, NSURL *destination) { " with " << [[location absoluteString] UTF8String] << ": " << [[error description] UTF8String]); } + } else if (error == nil && [response isKindOfClass:[NSHTTPURLResponse class]]) { + LOG_ERR("Failed to download " << + [[source absoluteString] UTF8String] << + ": response code " << [(NSHTTPURLResponse*)response statusCode]); } else if (error != nil) { LOG_ERR("Failed to download " << [[source absoluteString] UTF8String] << @@ -126,6 +130,17 @@ static void updateTemplates(NSData *data, NSURLResponse *response) if ([templateDate compare:cachedTemplateDate] == NSOrderedDescending) { downloadTemplate(url, fileForTemplate); } + } else if (error == nil && [response isKindOfClass:[NSHTTPURLResponse class]]) { + LOG_ERR("Failed to get HEAD of " << + [[url absoluteString] UTF8String] << + ": response code " << [(NSHTTPURLResponse*)response statusCode]); + } else if (error != nil) { + LOG_ERR("Failed to get HEAD of " << + [[url absoluteString] UTF8String] << + ": " << [[error description] UTF8String]); + } else { + LOG_ERR("Failed to get HEAD of " << + [[url absoluteString] UTF8String]); } }] resume]; } else { @@ -182,6 +197,17 @@ static void updateTemplates(NSData *data, NSURLResponse *response) completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) { if (error == nil && [response isKindOfClass:[NSHTTPURLResponse class]] && [(NSHTTPURLResponse*)response statusCode] == 200) updateTemplates(data, response); + else if (error == nil && [response isKindOfClass:[NSHTTPURLResponse class]]) + LOG_ERR("Failed to download " << + [[url absoluteString] UTF8String] << + ": response code " << [(NSHTTPURLResponse*)response statusCode]); + else if (error != nil) + LOG_ERR("Failed to download " << + [[url absoluteString] UTF8String] << + ": " << [[error description] UTF8String]); + else + LOG_ERR("Failed to download " << + [[url absoluteString] UTF8String]); }] resume]; } } _______________________________________________ Libreoffice-commits mailing list [email protected] https://lists.freedesktop.org/mailman/listinfo/libreoffice-commits
