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.
This commit is contained in:
James D. Lin 2018-08-16 17:40:33 -07:00 committed by GitHub
parent 9e26174597
commit 4ff4a5cc99
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -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;
}
}
}
}