From 11b342f3a9501a9f88a1d98f185ef0968fac312d Mon Sep 17 00:00:00 2001 From: "B. Petersen" Date: Thu, 26 Jul 2018 02:36:04 +0200 Subject: [PATCH] track a list of shared files add message do not export provider, we grant access explicitly --- MessengerProj/src/main/AndroidManifest.xml | 7 ++++++- .../src/main/java/com/b44t/messenger/AndroidUtilities.java | 4 ++++ .../com/b44t/messenger/AttachmentsContentProvider.java | 7 ++++++- 3 files changed, 16 insertions(+), 2 deletions(-) diff --git a/MessengerProj/src/main/AndroidManifest.xml b/MessengerProj/src/main/AndroidManifest.xml index c9c460cbe..0cd103d1c 100644 --- a/MessengerProj/src/main/AndroidManifest.xml +++ b/MessengerProj/src/main/AndroidManifest.xml @@ -227,7 +227,12 @@ - + + sharedFiles = new HashMap<>(); + public static void openForViewOrShare(Activity activity, int msg_id, String cmd) { MrMsg msg = MrMailbox.getMsg(msg_id); @@ -832,6 +835,7 @@ public class AndroidUtilities { Uri uri; if (path.startsWith(MrMailbox.getBlobdir())) { uri = Uri.parse("content://" + BuildConfig.APPLICATION_ID + ".attachments/" + file.getName()); + sharedFiles.put("/"+file.getName(), 1); // as different Android version handle uris in putExtra differently, we also check them on our own } else { if (Build.VERSION.SDK_INT >= 24) { uri = FileProvider.getUriForFile(activity, BuildConfig.APPLICATION_ID + ".provider", file); diff --git a/MessengerProj/src/main/java/com/b44t/messenger/AttachmentsContentProvider.java b/MessengerProj/src/main/java/com/b44t/messenger/AttachmentsContentProvider.java index 3d4493020..720b5eeb5 100644 --- a/MessengerProj/src/main/java/com/b44t/messenger/AttachmentsContentProvider.java +++ b/MessengerProj/src/main/java/com/b44t/messenger/AttachmentsContentProvider.java @@ -48,7 +48,12 @@ public class AttachmentsContentProvider extends ContentProvider { @Override public ParcelFileDescriptor openFile(Uri uri, String mode) throws FileNotFoundException { - File privateFile = new File(MrMailbox.getBlobdir(), uri.getPath()); + String path = uri.getPath(); + if (!AndroidUtilities.sharedFiles.containsKey(path)) { + throw new FileNotFoundException("File was not shared before."); + } + + File privateFile = new File(MrMailbox.getBlobdir(), path); return ParcelFileDescriptor.open(privateFile, ParcelFileDescriptor.MODE_READ_ONLY); }