diff --git a/app/src/main/java/eu/faircode/email/ActivityView.java b/app/src/main/java/eu/faircode/email/ActivityView.java index cdaba0d015..7fead0310d 100644 --- a/app/src/main/java/eu/faircode/email/ActivityView.java +++ b/app/src/main/java/eu/faircode/email/ActivityView.java @@ -1589,6 +1589,9 @@ public class ActivityView extends ActivityBilling implements FragmentManager.OnB long id = args.getLong("id"); Uri uri = args.getParcelable("uri"); + if ("file".equals(uri.getScheme())) + throw new IllegalArgumentException(context.getString(R.string.title_no_stream)); + File file = EntityAttachment.getFile(context, id); ParcelFileDescriptor pfd = null; @@ -1601,9 +1604,8 @@ public class ActivityView extends ActivityBilling implements FragmentManager.OnB byte[] buffer = new byte[ATTACHMENT_BUFFER_SIZE]; int read; - while ((read = fis.read(buffer)) != -1) { + while ((read = fis.read(buffer)) != -1) fos.write(buffer, 0, read); - } } finally { try { if (pfd != null) @@ -1635,7 +1637,10 @@ public class ActivityView extends ActivityBilling implements FragmentManager.OnB @Override protected void onException(Bundle args, Throwable ex) { - Helper.unexpectedError(ActivityView.this, ActivityView.this, ex); + if (ex instanceof IllegalArgumentException) + Snackbar.make(getVisibleView(), ex.getMessage(), Snackbar.LENGTH_LONG).show(); + else + Helper.unexpectedError(ActivityView.this, ActivityView.this, ex); } }.load(this, args); } diff --git a/app/src/main/java/eu/faircode/email/FragmentCompose.java b/app/src/main/java/eu/faircode/email/FragmentCompose.java index 82ed3d0ebc..db21b362ed 100644 --- a/app/src/main/java/eu/faircode/email/FragmentCompose.java +++ b/app/src/main/java/eu/faircode/email/FragmentCompose.java @@ -80,7 +80,6 @@ import java.io.BufferedOutputStream; import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.io.File; -import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; @@ -882,7 +881,7 @@ public class FragmentCompose extends FragmentEx { @Override protected void onException(Bundle args, Throwable ex) { // External app sending absolute file - if (ex instanceof FileNotFoundException) + if (ex instanceof IllegalArgumentException) Snackbar.make(view, ex.getMessage(), Snackbar.LENGTH_LONG).show(); else Helper.unexpectedError(getContext(), getViewLifecycleOwner(), ex); @@ -967,6 +966,9 @@ public class FragmentCompose extends FragmentEx { private static EntityAttachment addAttachment(Context context, long id, Uri uri, boolean image) throws IOException { + if ("file".equals(uri.getScheme())) + throw new IllegalArgumentException(context.getString(R.string.title_no_stream)); + EntityAttachment attachment = new EntityAttachment(); String name = null; @@ -1518,8 +1520,7 @@ public class FragmentCompose extends FragmentEx { @Override protected void onException(Bundle args, Throwable ex) { - // External app sending absolute file - if (ex instanceof FileNotFoundException) + if (ex instanceof IllegalArgumentException) Snackbar.make(view, ex.getMessage(), Snackbar.LENGTH_LONG).show(); else Helper.unexpectedError(getContext(), getViewLifecycleOwner(), ex); diff --git a/app/src/main/java/eu/faircode/email/FragmentSetup.java b/app/src/main/java/eu/faircode/email/FragmentSetup.java index 71810ff081..a010d332bf 100644 --- a/app/src/main/java/eu/faircode/email/FragmentSetup.java +++ b/app/src/main/java/eu/faircode/email/FragmentSetup.java @@ -609,6 +609,9 @@ public class FragmentSetup extends FragmentEx { Uri uri = args.getParcelable("uri"); String password = args.getString("password"); + if ("file".equals(uri.getScheme())) + throw new IllegalArgumentException(context.getString(R.string.title_no_stream)); + OutputStream out = null; try { Log.i(Helper.TAG, "Writing URI=" + uri); @@ -691,7 +694,10 @@ public class FragmentSetup extends FragmentEx { @Override protected void onException(Bundle args, Throwable ex) { - Helper.unexpectedError(getContext(), getViewLifecycleOwner(), ex); + if (ex instanceof IllegalArgumentException) + Snackbar.make(view, ex.getMessage(), Snackbar.LENGTH_LONG).show(); + else + Helper.unexpectedError(getContext(), getViewLifecycleOwner(), ex); } }.load(this, args); } @@ -705,9 +711,11 @@ public class FragmentSetup extends FragmentEx { @Override protected Void onLoad(Context context, Bundle args) throws Throwable { Uri uri = args.getParcelable("uri"); - String password = args.getString("password"); + if ("file".equals(uri.getScheme())) + throw new IllegalArgumentException(context.getString(R.string.title_no_stream)); + InputStream in = null; try { Log.i(Helper.TAG, "Reading URI=" + uri); @@ -826,6 +834,8 @@ public class FragmentSetup extends FragmentEx { protected void onException(Bundle args, Throwable ex) { if (ex.getCause() instanceof BadPaddingException) Snackbar.make(view, R.string.title_setup_password_invalid, Snackbar.LENGTH_LONG).show(); + else if (ex instanceof IllegalArgumentException) + Snackbar.make(view, ex.getMessage(), Snackbar.LENGTH_LONG).show(); else Helper.unexpectedError(getContext(), getViewLifecycleOwner(), ex); } diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 8c79fa7521..22eafd43af 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -262,6 +262,7 @@ No reply templates defined No viewer app available for %1$s Storage access framework not available + An outdated app sent a file path instead of a file stream Contact picker not available Attachment saved Some attachments are not downloaded and will not be added, continue?