[Libreoffice-commits] online.git: Branch 'distro/collabora/collabora-online-4' - 2 commits - ios/Mobile

Libreoffice Gerrit user logerrit at kemper.freedesktop.org
Fri Apr 26 08:45:22 UTC 2019


 ios/Mobile/AppDelegate.mm |   96 ++++++++++++++++++++++++++++++----------------
 1 file changed, 63 insertions(+), 33 deletions(-)

New commits:
commit 2b8a06523df5283c07402910052e1558e79909bf
Author:     Tor Lillqvist <tml at collabora.com>
AuthorDate: Fri Apr 26 11:44:28 2019 +0300
Commit:     Tor Lillqvist <tml at collabora.com>
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 <tml at collabora.com>
AuthorDate: Fri Apr 26 11:28:39 2019 +0300
Commit:     Tor Lillqvist <tml at collabora.com>
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];
         }
     }


More information about the Libreoffice-commits mailing list