From 88572212ae3fc45d634a31e2328d77651121f1af Mon Sep 17 00:00:00 2001 From: zhengzeqin Date: Tue, 23 Apr 2024 04:51:48 +0800 Subject: [PATCH] [image_picker] Fix If imageToScale is nil, the app will crash (#146682) (#6514) Fix https://github.com/flutter/flutter/issues/146682 Pre-launch Checklist --- .../image_picker_ios/CHANGELOG.md | 4 ++++ .../example/ios/RunnerTests/ImageUtilTests.m | 20 +++++++++++++++++++ .../ios/Classes/FLTImagePickerImageUtil.m | 3 +++ .../image_picker_ios/pubspec.yaml | 2 +- 4 files changed, 28 insertions(+), 1 deletion(-) diff --git a/packages/image_picker/image_picker_ios/CHANGELOG.md b/packages/image_picker/image_picker_ios/CHANGELOG.md index 787524c0e55a..daff28555b81 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 5566e1d92223..c5332425bde6 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 @@ - (void)testScaledImage_WideImage_ShouldNotBeScaledAboveOriginaWidthOrHeight { 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 547632871d17..d71175da1e92 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 @@ - (instancetype)initWithImages:(NSArray *)images interval:(NSTimeInte @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 70d578be3601..d57e2b6ee7b8 100755 --- a/packages/image_picker/image_picker_ios/pubspec.yaml +++ b/packages/image_picker/image_picker_ios/pubspec.yaml @@ -2,7 +2,7 @@ name: image_picker_ios 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