Fix src type=nil NSDictionary crash (#455)

- Use NSNull object in NSDictionary when type (or URI) missing from supplied
  src object.
- In addition, defensively supply valid strings for URI and type from JS.
This commit is contained in:
abrahambotros 2017-01-28 17:46:30 -08:00 committed by Matt Apperson
parent 2b709a5d54
commit 201335f05c
2 changed files with 12 additions and 11 deletions

View File

@ -153,7 +153,7 @@ export default class Video extends Component {
const resizeMode = this.props.resizeMode; const resizeMode = this.props.resizeMode;
const source = resolveAssetSource(this.props.source) || {}; const source = resolveAssetSource(this.props.source) || {};
let uri = source.uri; let uri = source.uri || '';
if (uri && uri.match(/^\//)) { if (uri && uri.match(/^\//)) {
uri = `file://${uri}`; uri = `file://${uri}`;
} }
@ -180,7 +180,7 @@ export default class Video extends Component {
uri, uri,
isNetwork, isNetwork,
isAsset, isAsset,
type: source.type, type: source.type || '',
mainVer: source.mainVer || 0, mainVer: source.mainVer || 0,
patchVer: source.patchVer || 0, patchVer: source.patchVer || 0,
}, },

View File

@ -277,15 +277,16 @@ static NSString *const playbackRate = @"rate";
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(0 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{ dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(0 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
//Perform on next run loop, otherwise onVideoLoadStart is nil //Perform on next run loop, otherwise onVideoLoadStart is nil
if(self.onVideoLoadStart) { if(self.onVideoLoadStart) {
self.onVideoLoadStart(@{@"src": @{ id uri = [source objectForKey:@"uri"];
@"uri": [source objectForKey:@"uri"], id type = [source objectForKey:@"type"];
@"type": [source objectForKey:@"type"], self.onVideoLoadStart(@{@"src": @{
@"isNetwork": [NSNumber numberWithBool:(bool)[source objectForKey:@"isNetwork"]]}, @"uri": uri ? uri : [NSNull null],
@"target": self.reactTag @"type": type ? type : [NSNull null],
}); @"isNetwork": [NSNumber numberWithBool:(bool)[source objectForKey:@"isNetwork"]]},
} @"target": self.reactTag
});
}
}); });
} }