From 4bb19032e67e9e1ad371bf526b0f4ac02669a252 Mon Sep 17 00:00:00 2001 From: Gray Mackall Date: Fri, 16 Jun 2023 13:38:15 -0700 Subject: [PATCH 1/3] modify FileUtils.getBaseName to return the whole filename if no . is found, and add test --- .../io/flutter/plugins/imagepicker/FileUtils.java | 6 +++++- .../io/flutter/plugins/imagepicker/FileUtilTest.java | 12 ++++++++++++ 2 files changed, 17 insertions(+), 1 deletion(-) diff --git a/packages/image_picker/image_picker_android/android/src/main/java/io/flutter/plugins/imagepicker/FileUtils.java b/packages/image_picker/image_picker_android/android/src/main/java/io/flutter/plugins/imagepicker/FileUtils.java index df229d8cefb..8afed83aaef 100644 --- a/packages/image_picker/image_picker_android/android/src/main/java/io/flutter/plugins/imagepicker/FileUtils.java +++ b/packages/image_picker/image_picker_android/android/src/main/java/io/flutter/plugins/imagepicker/FileUtils.java @@ -137,7 +137,11 @@ private static void copy(InputStream in, OutputStream out) throws IOException { } private static String getBaseName(String fileName) { + int lastDotIndex = fileName.lastIndexOf('.'); + if (lastDotIndex < 0) { + return fileName; + } // Basename is everything before the last '.'. - return fileName.substring(0, fileName.lastIndexOf('.')); + return fileName.substring(0, lastDotIndex); } } diff --git a/packages/image_picker/image_picker_android/android/src/test/java/io/flutter/plugins/imagepicker/FileUtilTest.java b/packages/image_picker/image_picker_android/android/src/test/java/io/flutter/plugins/imagepicker/FileUtilTest.java index 06315f99f99..61cc8a190c2 100644 --- a/packages/image_picker/image_picker_android/android/src/test/java/io/flutter/plugins/imagepicker/FileUtilTest.java +++ b/packages/image_picker/image_picker_android/android/src/test/java/io/flutter/plugins/imagepicker/FileUtilTest.java @@ -109,6 +109,16 @@ public void FileUtil_getImageName() throws IOException { assertTrue(path.endsWith("a.b.png")); } + @Test + public void FileUtil_getPathFromUri_noExtensionInBaseName() throws IOException { + Uri uri = MockContentProvider.NO_EXTENSION_URI; + Robolectric.buildContentProvider(MockContentProvider.class).create("dummy"); + shadowContentResolver.registerInputStream( + uri, new ByteArrayInputStream("imageStream".getBytes(UTF_8))); + String path = fileUtils.getPathFromUri(context, uri); + assertTrue(path.endsWith("abc.png")); + } + @Test public void FileUtil_getImageName_mismatchedType() throws IOException { Uri uri = MockContentProvider.WEBP_URI; @@ -133,6 +143,7 @@ private static class MockContentProvider extends ContentProvider { public static final Uri PNG_URI = Uri.parse("content://dummy/a.b.png"); public static final Uri WEBP_URI = Uri.parse("content://dummy/c.d.png"); public static final Uri UNKNOWN_URI = Uri.parse("content://dummy/e.f.g"); + public static final Uri NO_EXTENSION_URI = Uri.parse("content://dummy/abc"); @Override public boolean onCreate() { @@ -157,6 +168,7 @@ public Cursor query( public String getType(@NonNull Uri uri) { if (uri.equals(PNG_URI)) return "image/png"; if (uri.equals(WEBP_URI)) return "image/webp"; + if (uri.equals(NO_EXTENSION_URI)) return "image/png"; return null; } From 25e29c92f539ff7789b95ef3dcca79c689ab2037 Mon Sep 17 00:00:00 2001 From: Gray Mackall Date: Fri, 16 Jun 2023 13:50:45 -0700 Subject: [PATCH 2/3] CHANGELOG and pubspec updates --- packages/image_picker/image_picker_android/CHANGELOG.md | 4 ++++ packages/image_picker/image_picker_android/pubspec.yaml | 2 +- 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/packages/image_picker/image_picker_android/CHANGELOG.md b/packages/image_picker/image_picker_android/CHANGELOG.md index 971cfe08f33..8198b4022cf 100644 --- a/packages/image_picker/image_picker_android/CHANGELOG.md +++ b/packages/image_picker/image_picker_android/CHANGELOG.md @@ -1,3 +1,7 @@ +## 0.8.8 + +* Fixes a crash case when picking an image with a display name that does not contain a period. + ## 0.8.7 * Adds `getMedia` method. diff --git a/packages/image_picker/image_picker_android/pubspec.yaml b/packages/image_picker/image_picker_android/pubspec.yaml index ed7c8dbd587..38c8dc7447e 100755 --- a/packages/image_picker/image_picker_android/pubspec.yaml +++ b/packages/image_picker/image_picker_android/pubspec.yaml @@ -3,7 +3,7 @@ description: Android implementation of the image_picker plugin. repository: https://github.com/flutter/packages/tree/main/packages/image_picker/image_picker_android issue_tracker: https://github.com/flutter/flutter/issues?q=is%3Aissue+is%3Aopen+label%3A%22p%3A+image_picker%22 -version: 0.8.7 +version: 0.8.8 environment: sdk: ">=2.18.0 <4.0.0" From c114acc1ed82168be00f0df5f08f4a5c0eb7aee3 Mon Sep 17 00:00:00 2001 From: Gray Mackall Date: Fri, 16 Jun 2023 13:51:49 -0700 Subject: [PATCH 3/3] format --- .../test/java/io/flutter/plugins/imagepicker/FileUtilTest.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/image_picker/image_picker_android/android/src/test/java/io/flutter/plugins/imagepicker/FileUtilTest.java b/packages/image_picker/image_picker_android/android/src/test/java/io/flutter/plugins/imagepicker/FileUtilTest.java index 61cc8a190c2..620bac74a17 100644 --- a/packages/image_picker/image_picker_android/android/src/test/java/io/flutter/plugins/imagepicker/FileUtilTest.java +++ b/packages/image_picker/image_picker_android/android/src/test/java/io/flutter/plugins/imagepicker/FileUtilTest.java @@ -114,7 +114,7 @@ public void FileUtil_getPathFromUri_noExtensionInBaseName() throws IOException { Uri uri = MockContentProvider.NO_EXTENSION_URI; Robolectric.buildContentProvider(MockContentProvider.class).create("dummy"); shadowContentResolver.registerInputStream( - uri, new ByteArrayInputStream("imageStream".getBytes(UTF_8))); + uri, new ByteArrayInputStream("imageStream".getBytes(UTF_8))); String path = fileUtils.getPathFromUri(context, uri); assertTrue(path.endsWith("abc.png")); }