From 4ff4a5cc995ee7ff7403b21189fa3e9234a5638f Mon Sep 17 00:00:00 2001 From: "James D. Lin" Date: Thu, 16 Aug 2018 17:40:33 -0700 Subject: [PATCH] Fix potential null pointer dereference in FlutterDartProject (#6035) If `FlutterDartProject` found an `FLTLibraryPath` entry in an iOS application's `Info.plist`, it assumed that values that were valid filesystem paths were paths to bundles. If the attempt to retrieve the `NSBundle` fails, `FlutterDartProject` ignored the failure and then would assign `nil` to a C++ `std::string`, resulting in a null pointer dereference. Add some failure checks to prevent this. --- .../ios/framework/Source/FlutterDartProject.mm | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/shell/platform/darwin/ios/framework/Source/FlutterDartProject.mm b/shell/platform/darwin/ios/framework/Source/FlutterDartProject.mm index d2073fabc2e..a89c61acfcc 100644 --- a/shell/platform/darwin/ios/framework/Source/FlutterDartProject.mm +++ b/shell/platform/darwin/ios/framework/Source/FlutterDartProject.mm @@ -73,8 +73,10 @@ static blink::Settings DefaultSettingsForProcess(NSBundle* bundle = nil) { NSString* libraryName = [mainBundle objectForInfoDictionaryKey:@"FLTLibraryPath"]; NSString* libraryPath = [mainBundle pathForResource:libraryName ofType:@""]; if (libraryPath.length > 0) { - settings.application_library_path = - [NSBundle bundleWithPath:libraryPath].executablePath.UTF8String; + NSString* executablePath = [NSBundle bundleWithPath:libraryPath].executablePath; + if (executablePath.length > 0) { + settings.application_library_path = executablePath.UTF8String; + } } } @@ -84,8 +86,11 @@ static blink::Settings DefaultSettingsForProcess(NSBundle* bundle = nil) { NSString* applicationFrameworkPath = [mainBundle pathForResource:@"Frameworks/App.framework" ofType:@""]; if (applicationFrameworkPath.length > 0) { - settings.application_library_path = - [NSBundle bundleWithPath:applicationFrameworkPath].executablePath.UTF8String; + NSString* executablePath = + [NSBundle bundleWithPath:applicationFrameworkPath].executablePath; + if (executablePath.length > 0) { + settings.application_library_path = executablePath.UTF8String; + } } } }