[image_picker] Fix If imageToScale is nil, the app will crash (#146682) (#6514)
Fix https://github.com/flutter/flutter/issues/146682
Pre-launch Checklist
diff --git a/packages/image_picker/image_picker_ios/CHANGELOG.md b/packages/image_picker/image_picker_ios/CHANGELOG.md
index 787524c..daff285 100644
--- a/packages/image_picker/image_picker_ios/CHANGELOG.md
+++ b/packages/image_picker/image_picker_ios/CHANGELOG.md
@@ -1,3 +1,7 @@
+## 0.8.10+1
+
+* Fixes a possible crash when calling a picker method UIGraphicsImageRenderer if imageToScale is nil.
+
## 0.8.10
* Adds limit parameter to `MediaOptions` and `MultiImagePickerOptions` that sets a limit to how many media or image items can be selected.
diff --git a/packages/image_picker/image_picker_ios/example/ios/RunnerTests/ImageUtilTests.m b/packages/image_picker/image_picker_ios/example/ios/RunnerTests/ImageUtilTests.m
index 5566e1d..c533242 100644
--- a/packages/image_picker/image_picker_ios/example/ios/RunnerTests/ImageUtilTests.m
+++ b/packages/image_picker/image_picker_ios/example/ios/RunnerTests/ImageUtilTests.m
@@ -217,4 +217,24 @@
XCTAssertEqual(newImage.size.height, 7);
}
+- (void)testScaledImage_ImageIsNil {
+ UIImage *image = nil;
+ UIImage *newImage = [FLTImagePickerImageUtil scaledImage:image
+ maxWidth:@1440
+ maxHeight:@1440
+ isMetadataAvailable:YES];
+
+ XCTAssertEqual(newImage, nil);
+}
+
+- (void)testScaledImage_ImageMaxWidthZeroAndMaxHeightIsZero {
+ UIImage *image = [UIImage imageWithData:ImagePickerTestImages.JPGTestData];
+ UIImage *newImage = [FLTImagePickerImageUtil scaledImage:image
+ maxWidth:@0
+ maxHeight:@0
+ isMetadataAvailable:YES];
+
+ XCTAssertEqual(newImage, nil);
+}
+
@end
diff --git a/packages/image_picker/image_picker_ios/ios/Classes/FLTImagePickerImageUtil.m b/packages/image_picker/image_picker_ios/ios/Classes/FLTImagePickerImageUtil.m
index 5476328..d71175d 100644
--- a/packages/image_picker/image_picker_ios/ios/Classes/FLTImagePickerImageUtil.m
+++ b/packages/image_picker/image_picker_ios/ios/Classes/FLTImagePickerImageUtil.m
@@ -29,6 +29,9 @@
@implementation FLTImagePickerImageUtil : NSObject
static UIImage *FLTImagePickerDrawScaledImage(UIImage *imageToScale, double width, double height) {
+ if (imageToScale == nil || width == 0 || height == 0) {
+ return nil;
+ }
UIGraphicsImageRenderer *imageRenderer =
[[UIGraphicsImageRenderer alloc] initWithSize:CGSizeMake(width, height)
format:imageToScale.imageRendererFormat];
diff --git a/packages/image_picker/image_picker_ios/pubspec.yaml b/packages/image_picker/image_picker_ios/pubspec.yaml
index 70d578b..d57e2b6 100755
--- a/packages/image_picker/image_picker_ios/pubspec.yaml
+++ b/packages/image_picker/image_picker_ios/pubspec.yaml
@@ -2,7 +2,7 @@
description: iOS implementation of the image_picker plugin.
repository: https://github.com/flutter/packages/tree/main/packages/image_picker/image_picker_ios
issue_tracker: https://github.com/flutter/flutter/issues?q=is%3Aissue+is%3Aopen+label%3A%22p%3A+image_picker%22
-version: 0.8.10
+version: 0.8.10+1
environment:
sdk: ^3.3.0