Skip to content

Commit d0cd3ca

Browse files
zhongwuzwfacebook-github-bot
authored andcommitted
Add ImageIO related C nullable check to prevent crash (#23186)
Summary: Changelog: ---------- [iOS] [Fixed] - Add ImageIO related C nullable check to prevent crash Pull Request resolved: #23186 Differential Revision: D13838590 Pulled By: cpojer fbshipit-source-id: 14bfa826ce75c32129e6a980a04bb85fb35411a0
1 parent 959a133 commit d0cd3ca

File tree

1 file changed

+11
-4
lines changed

1 file changed

+11
-4
lines changed

Libraries/Image/RCTGIFImageDecoder.m

+11-4
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,10 @@ - (RCTImageLoaderCancellationBlock)decodeImageData:(NSData *)imageData
3131
completionHandler:(RCTImageLoaderCompletionBlock)completionHandler
3232
{
3333
CGImageSourceRef imageSource = CGImageSourceCreateWithData((CFDataRef)imageData, NULL);
34+
if (!imageSource) {
35+
completionHandler(nil, nil);
36+
return ^{};
37+
}
3438
NSDictionary<NSString *, id> *properties = (__bridge_transfer NSDictionary *)CGImageSourceCopyProperties(imageSource, NULL);
3539
CGFloat loopCount = 0;
3640
if ([[properties[(id)kCGImagePropertyGIFDictionary] allKeys] containsObject:(id)kCGImagePropertyGIFLoopCount]) {
@@ -54,6 +58,9 @@ - (RCTImageLoaderCancellationBlock)decodeImageData:(NSData *)imageData
5458
for (size_t i = 0; i < imageCount; i++) {
5559

5660
CGImageRef imageRef = CGImageSourceCreateImageAtIndex(imageSource, i, NULL);
61+
if (!imageRef) {
62+
continue;
63+
}
5764
if (!image) {
5865
image = [UIImage imageWithCGImage:imageRef scale:scale orientation:UIImageOrientationUp];
5966
}
@@ -64,10 +71,10 @@ - (RCTImageLoaderCancellationBlock)decodeImageData:(NSData *)imageData
6471
const NSTimeInterval kDelayTimeIntervalDefault = 0.1;
6572
NSNumber *delayTime = frameGIFProperties[(id)kCGImagePropertyGIFUnclampedDelayTime] ?: frameGIFProperties[(id)kCGImagePropertyGIFDelayTime];
6673
if (delayTime == nil) {
67-
if (i == 0) {
74+
if (delays.count == 0) {
6875
delayTime = @(kDelayTimeIntervalDefault);
6976
} else {
70-
delayTime = delays[i - 1];
77+
delayTime = delays.lastObject;
7178
}
7279
}
7380

@@ -77,8 +84,8 @@ - (RCTImageLoaderCancellationBlock)decodeImageData:(NSData *)imageData
7784
}
7885

7986
duration += delayTime.doubleValue;
80-
delays[i] = delayTime;
81-
images[i] = (__bridge_transfer id)imageRef;
87+
[delays addObject:delayTime];
88+
[images addObject:(__bridge_transfer id)imageRef];
8289
}
8390
CFRelease(imageSource);
8491

0 commit comments

Comments
 (0)