Skip to content

Commit 05a9aa8

Browse files
Bugfix/security exception (#3627)
* Fixes #3626 * Check is file is actually created before writing to file, file picker android * Handle Security exception
1 parent c961099 commit 05a9aa8

File tree

2 files changed

+8
-5
lines changed

2 files changed

+8
-5
lines changed

app/src/main/java/fr/free/nrw/commons/filepicker/FilePicker.java

+2-2
Original file line numberDiff line numberDiff line change
@@ -166,7 +166,7 @@ public static void handleActivityResult(int requestCode, int resultCode, Intent
166166
public static List<UploadableFile> handleExternalImagesPicked(Intent data, Activity activity) {
167167
try {
168168
return getFilesFromGalleryPictures(data, activity);
169-
} catch (IOException e) {
169+
} catch (IOException | SecurityException e) {
170170
e.printStackTrace();
171171
}
172172
return new ArrayList<>();
@@ -207,7 +207,7 @@ private static void onPictureReturnedFromGallery(Intent data, Activity activity,
207207
}
208208
}
209209

210-
private static List<UploadableFile> getFilesFromGalleryPictures(Intent data, Activity activity) throws IOException {
210+
private static List<UploadableFile> getFilesFromGalleryPictures(Intent data, Activity activity) throws IOException, SecurityException {
211211
List<UploadableFile> files = new ArrayList<>();
212212
ClipData clipData = data.getClipData();
213213
if (clipData == null) {

app/src/main/java/fr/free/nrw/commons/filepicker/PickedFiles.java

+6-3
Original file line numberDiff line numberDiff line change
@@ -104,12 +104,15 @@ static void scanCopiedImages(Context context, List<File> copiedImages) {
104104
});
105105
}
106106

107-
static UploadableFile pickedExistingPicture(@NonNull Context context, Uri photoUri) throws IOException {
107+
static UploadableFile pickedExistingPicture(@NonNull Context context, Uri photoUri) throws IOException, SecurityException {// SecurityException for those file providers who share URI but forget to grant necessary permissions
108108
InputStream pictureInputStream = context.getContentResolver().openInputStream(photoUri);
109109
File directory = tempImageDirectory(context);
110110
File photoFile = new File(directory, UUID.randomUUID().toString() + "." + getMimeType(context, photoUri));
111-
photoFile.createNewFile();
112-
writeToFile(pictureInputStream, photoFile);
111+
if (photoFile.createNewFile()) {
112+
writeToFile(pictureInputStream, photoFile);
113+
} else {
114+
throw new IOException("could not create photoFile to write upon");
115+
}
113116
return new UploadableFile(photoUri, photoFile);
114117
}
115118

0 commit comments

Comments
 (0)