From 455f4689313512118c4ed3fbf47a4e5f33e8b4d9 Mon Sep 17 00:00:00 2001 From: zhengzeqin Date: Sun, 14 Apr 2024 14:50:52 +0800 Subject: [PATCH 1/6] [image_picker] Fix If imageToScale is nil, the app will crash (#146682) --- .../image_picker_ios/ios/Classes/FLTImagePickerImageUtil.m | 3 +++ 1 file changed, 3 insertions(+) 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 547632871d1..a0feac7e801 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]; From fea7eff8ed2bea6c0cb4d0c4a02a83209f842b44 Mon Sep 17 00:00:00 2001 From: zhengzeqin Date: Sun, 14 Apr 2024 15:02:28 +0800 Subject: [PATCH 2/6] update yaml --- packages/image_picker/image_picker_ios/CHANGELOG.md | 4 ++++ packages/image_picker/image_picker_ios/pubspec.yaml | 2 +- 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/packages/image_picker/image_picker_ios/CHANGELOG.md b/packages/image_picker/image_picker_ios/CHANGELOG.md index 787524c0e55..daff28555b8 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/pubspec.yaml b/packages/image_picker/image_picker_ios/pubspec.yaml index 70d578be360..d57e2b6ee7b 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 From 8cbaeefceea5a885071aa3f000d1e442a0e88b8b Mon Sep 17 00:00:00 2001 From: zhengzeqin Date: Mon, 15 Apr 2024 15:18:26 +0800 Subject: [PATCH 3/6] update format --- .../image_picker_ios/ios/Classes/FLTImagePickerImageUtil.m | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) 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 a0feac7e801..d71175da1e9 100644 --- a/packages/image_picker/image_picker_ios/ios/Classes/FLTImagePickerImageUtil.m +++ b/packages/image_picker/image_picker_ios/ios/Classes/FLTImagePickerImageUtil.m @@ -30,7 +30,7 @@ @implementation FLTImagePickerImageUtil : NSObject static UIImage *FLTImagePickerDrawScaledImage(UIImage *imageToScale, double width, double height) { if (imageToScale == nil || width == 0 || height == 0) { - return nil; + return nil; } UIGraphicsImageRenderer *imageRenderer = [[UIGraphicsImageRenderer alloc] initWithSize:CGSizeMake(width, height) From 73b47888950a76a04aac91b18b60d3a66a6a922e Mon Sep 17 00:00:00 2001 From: zhengzeqin Date: Mon, 15 Apr 2024 22:27:12 +0800 Subject: [PATCH 4/6] add test --- .../example/ios/RunnerTests/ImageUtilTests.m | 10 ++++++++++ 1 file changed, 10 insertions(+) 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 5566e1d9222..1bc373b7328 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,14 @@ - (void)testScaledImage_WideImage_ShouldNotBeScaledAboveOriginaWidthOrHeight { XCTAssertEqual(newImage.size.height, 7); } +- (void)testScaledImage_ImageIsNil { + UIImage *image = nil; + UIImage *scaledImage = [FLTImagePickerImageUtil scaledImage:image + maxWidth:@1440 + maxHeight:@1440 + isMetadataAvailable:YES]; + + // Assert the same bytes pointer (not just equal objects). + XCTAssertEqual(image, scaledImage); +} @end From 3ae6141cc5643cc04ba3130d0789dcd363272e40 Mon Sep 17 00:00:00 2001 From: zhengzeqin Date: Fri, 19 Apr 2024 10:30:08 +0800 Subject: [PATCH 5/6] update test --- .../example/ios/RunnerTests/ImageUtilTests.m | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-) 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 1bc373b7328..a8fb1888be8 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 @@ -219,12 +219,22 @@ - (void)testScaledImage_WideImage_ShouldNotBeScaledAboveOriginaWidthOrHeight { - (void)testScaledImage_ImageIsNil { UIImage *image = nil; - UIImage *scaledImage = [FLTImagePickerImageUtil scaledImage:image + UIImage *newImage = [FLTImagePickerImageUtil scaledImage:image maxWidth:@1440 maxHeight:@1440 isMetadataAvailable:YES]; - // Assert the same bytes pointer (not just equal objects). - XCTAssertEqual(image, scaledImage); + 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 From 4c4bea993b5a1f531cb804f3ed80edfe418ac4d0 Mon Sep 17 00:00:00 2001 From: zhengzeqin Date: Fri, 19 Apr 2024 10:32:06 +0800 Subject: [PATCH 6/6] update --- .../example/ios/RunnerTests/ImageUtilTests.m | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) 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 a8fb1888be8..c5332425bde 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 @@ -220,9 +220,9 @@ - (void)testScaledImage_WideImage_ShouldNotBeScaledAboveOriginaWidthOrHeight { - (void)testScaledImage_ImageIsNil { UIImage *image = nil; UIImage *newImage = [FLTImagePickerImageUtil scaledImage:image - maxWidth:@1440 - maxHeight:@1440 - isMetadataAvailable:YES]; + maxWidth:@1440 + maxHeight:@1440 + isMetadataAvailable:YES]; XCTAssertEqual(newImage, nil); } @@ -230,9 +230,9 @@ - (void)testScaledImage_ImageIsNil { - (void)testScaledImage_ImageMaxWidthZeroAndMaxHeightIsZero { UIImage *image = [UIImage imageWithData:ImagePickerTestImages.JPGTestData]; UIImage *newImage = [FLTImagePickerImageUtil scaledImage:image - maxWidth:@0 - maxHeight:@0 - isMetadataAvailable:YES]; + maxWidth:@0 + maxHeight:@0 + isMetadataAvailable:YES]; XCTAssertEqual(newImage, nil); }