From 1aa80a92582beedaa00878d4f464033f765805e8 Mon Sep 17 00:00:00 2001 From: M66B Date: Sun, 27 Mar 2022 13:43:45 +0200 Subject: [PATCH] Check resolver input/output streams --- .../java/eu/faircode/email/ActivityAMP.java | 3 +++ .../java/eu/faircode/email/ActivityBase.java | 8 ++++++- .../java/eu/faircode/email/ActivityDSN.java | 4 ++++ .../java/eu/faircode/email/ActivityDmarc.java | 3 +++ .../java/eu/faircode/email/ActivityEML.java | 7 ++++++ .../java/eu/faircode/email/ActivitySetup.java | 23 +++++++++++++++---- .../eu/faircode/email/AdapterMessage.java | 3 +++ .../java/eu/faircode/email/FragmentBase.java | 6 +++++ .../eu/faircode/email/FragmentCompose.java | 2 +- .../eu/faircode/email/FragmentContacts.java | 9 ++++++-- .../eu/faircode/email/FragmentFolders.java | 6 ++++- .../eu/faircode/email/FragmentMessages.java | 3 +++ .../email/FragmentOptionsEncryption.java | 2 ++ .../java/eu/faircode/email/FragmentRules.java | 4 ++++ .../main/java/eu/faircode/email/Helper.java | 2 ++ .../java/eu/faircode/email/ImageHelper.java | 2 ++ 16 files changed, 77 insertions(+), 10 deletions(-) diff --git a/app/src/main/java/eu/faircode/email/ActivityAMP.java b/app/src/main/java/eu/faircode/email/ActivityAMP.java index 08b6e0d2df..7dcd9b16f2 100644 --- a/app/src/main/java/eu/faircode/email/ActivityAMP.java +++ b/app/src/main/java/eu/faircode/email/ActivityAMP.java @@ -45,6 +45,7 @@ import androidx.webkit.WebViewFeature; import org.jsoup.nodes.Document; import org.jsoup.nodes.Element; +import java.io.FileNotFoundException; import java.io.InputStream; import java.nio.charset.StandardCharsets; import java.util.Arrays; @@ -207,6 +208,8 @@ public class ActivityAMP extends ActivityBase { String html; ContentResolver resolver = context.getContentResolver(); try (InputStream is = resolver.openInputStream(uri)) { + if (is == null) + throw new FileNotFoundException(uri.toString()); html = Helper.readStream(is); } diff --git a/app/src/main/java/eu/faircode/email/ActivityBase.java b/app/src/main/java/eu/faircode/email/ActivityBase.java index 93c875cdfd..4541e89a8b 100644 --- a/app/src/main/java/eu/faircode/email/ActivityBase.java +++ b/app/src/main/java/eu/faircode/email/ActivityBase.java @@ -62,7 +62,9 @@ import androidx.preference.PreferenceManager; import androidx.recyclerview.widget.RecyclerView; import java.io.File; +import java.io.FileNotFoundException; import java.io.FileOutputStream; +import java.io.InputStream; import java.lang.reflect.Field; import java.util.ArrayList; import java.util.Arrays; @@ -472,7 +474,11 @@ abstract class ActivityBase extends AppCompatActivity implements SharedPreferenc File file = new File(dir, fname); Log.i("Copying shared file to " + file); - Helper.copy(getContentResolver().openInputStream(uri), new FileOutputStream(file)); + InputStream is = getContentResolver().openInputStream(uri); + if (is == null) + throw new FileNotFoundException(uri.toString()); + + Helper.copy(is, new FileOutputStream(file)); return FileProvider.getUriForFile(this, BuildConfig.APPLICATION_ID, file); } catch (Throwable ex) { diff --git a/app/src/main/java/eu/faircode/email/ActivityDSN.java b/app/src/main/java/eu/faircode/email/ActivityDSN.java index 1f17d192b7..e6cedd7a97 100644 --- a/app/src/main/java/eu/faircode/email/ActivityDSN.java +++ b/app/src/main/java/eu/faircode/email/ActivityDSN.java @@ -32,6 +32,7 @@ import android.widget.TextView; import androidx.constraintlayout.widget.Group; import java.io.ByteArrayOutputStream; +import java.io.FileNotFoundException; import java.io.InputStream; import java.nio.charset.StandardCharsets; @@ -96,6 +97,9 @@ public class ActivityDSN extends ActivityBase { ContentResolver resolver = context.getContentResolver(); try (InputStream is = resolver.openInputStream(uri)) { + if (is == null) + throw new FileNotFoundException(uri.toString()); + ByteArrayOutputStream bos = new ByteArrayOutputStream(); byte[] buffer = new byte[Helper.BUFFER_SIZE]; int length; diff --git a/app/src/main/java/eu/faircode/email/ActivityDmarc.java b/app/src/main/java/eu/faircode/email/ActivityDmarc.java index 46045531b9..a8ed3e503b 100644 --- a/app/src/main/java/eu/faircode/email/ActivityDmarc.java +++ b/app/src/main/java/eu/faircode/email/ActivityDmarc.java @@ -42,6 +42,7 @@ import androidx.constraintlayout.widget.Group; import org.xmlpull.v1.XmlPullParser; import org.xmlpull.v1.XmlPullParserFactory; +import java.io.FileNotFoundException; import java.io.InputStream; import java.io.StringReader; import java.net.InetAddress; @@ -120,6 +121,8 @@ public class ActivityDmarc extends ActivityBase { String data; ContentResolver resolver = context.getContentResolver(); try (InputStream is = resolver.openInputStream(uri)) { + if (is == null) + throw new FileNotFoundException(uri.toString()); data = Helper.readStream(is); } diff --git a/app/src/main/java/eu/faircode/email/ActivityEML.java b/app/src/main/java/eu/faircode/email/ActivityEML.java index dd69f2c1b2..f8b7d2b182 100644 --- a/app/src/main/java/eu/faircode/email/ActivityEML.java +++ b/app/src/main/java/eu/faircode/email/ActivityEML.java @@ -266,6 +266,8 @@ public class ActivityEML extends ActivityBase { ContentResolver resolver = context.getContentResolver(); try (InputStream is = resolver.openInputStream(uri)) { + if (is == null) + throw new FileNotFoundException(uri.toString()); Properties props = MessageHelper.getSessionProperties(); Session isession = Session.getInstance(props, null); @@ -534,6 +536,9 @@ public class ActivityEML extends ActivityBase { os = getContentResolver().openOutputStream(uri); is = apart.part.getInputStream(); + if (os == null) + throw new FileNotFoundException(uri.toString()); + byte[] buffer = new byte[Helper.BUFFER_SIZE]; int read; while ((read = is.read(buffer)) != -1) @@ -631,6 +636,8 @@ public class ActivityEML extends ActivityBase { ContentResolver resolver = context.getContentResolver(); try (InputStream is = resolver.openInputStream(uri)) { + if (is == null) + throw new FileNotFoundException(uri.toString()); Properties props = MessageHelper.getSessionProperties(); Session isession = Session.getInstance(props, null); diff --git a/app/src/main/java/eu/faircode/email/ActivitySetup.java b/app/src/main/java/eu/faircode/email/ActivitySetup.java index eb5c7c0f4e..64d7fd4666 100644 --- a/app/src/main/java/eu/faircode/email/ActivitySetup.java +++ b/app/src/main/java/eu/faircode/email/ActivitySetup.java @@ -732,6 +732,8 @@ public class ActivitySetup extends ActivityBase implements FragmentManager.OnBac DocumentFile file = DocumentFile.fromSingleUri(context, uri); try (OutputStream raw = resolver.openOutputStream(uri)) { Log.i("Writing URI=" + uri + " name=" + file.getName() + " virtual=" + file.isVirtual()); + if (raw == null) + throw new FileNotFoundException(uri.toString()); if (TextUtils.isEmpty(password)) raw.write(jexport.toString(2).getBytes()); @@ -857,8 +859,10 @@ public class ActivitySetup extends ActivityBase implements FragmentManager.OnBac StringBuilder data = new StringBuilder(); Log.i("Reading URI=" + uri); ContentResolver resolver = context.getContentResolver(); - try (InputStream raw = new BufferedInputStream(resolver.openInputStream(uri))) { - + InputStream is = resolver.openInputStream(uri); + if (is == null) + throw new FileNotFoundException(uri.toString()); + try (InputStream raw = new BufferedInputStream(is)) { InputStream in; if (TextUtils.isEmpty(password)) in = raw; @@ -1284,10 +1288,13 @@ public class ActivitySetup extends ActivityBase implements FragmentManager.OnBac DB db = DB.getInstance(context); ContentResolver resolver = context.getContentResolver(); - try (InputStream is = new BufferedInputStream(resolver.openInputStream(uri))) { + InputStream is = resolver.openInputStream(uri); + if (is == null) + throw new FileNotFoundException(uri.toString()); + try (InputStream bis = new BufferedInputStream(is)) { XmlPullParserFactory factory = XmlPullParserFactory.newInstance(); XmlPullParser xml = factory.newPullParser(); - xml.setInput(new InputStreamReader(is)); + xml.setInput(new InputStreamReader(bis)); EntityAccount account = null; EntityIdentity identity = null; @@ -1504,6 +1511,9 @@ public class ActivitySetup extends ActivityBase implements FragmentManager.OnBac X509Certificate cert; CertificateFactory fact = CertificateFactory.getInstance("X.509"); try (InputStream is = context.getContentResolver().openInputStream(uri)) { + if (is == null) + throw new FileNotFoundException(uri.toString()); + if (der) cert = (X509Certificate) fact.generateCertificate(is); else { @@ -1560,7 +1570,10 @@ public class ActivitySetup extends ActivityBase implements FragmentManager.OnBac Log.i("Reading URI=" + uri); ContentResolver resolver = context.getContentResolver(); - EmailProvider.importProfiles(resolver.openInputStream(uri), context); + InputStream is = resolver.openInputStream(uri); + if (is == null) + throw new FileNotFoundException(uri.toString()); + EmailProvider.importProfiles(is, context); return null; } diff --git a/app/src/main/java/eu/faircode/email/AdapterMessage.java b/app/src/main/java/eu/faircode/email/AdapterMessage.java index 4f64325d16..775eaafd0f 100644 --- a/app/src/main/java/eu/faircode/email/AdapterMessage.java +++ b/app/src/main/java/eu/faircode/email/AdapterMessage.java @@ -157,6 +157,7 @@ import java.io.BufferedOutputStream; import java.io.ByteArrayInputStream; import java.io.File; import java.io.FileInputStream; +import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; @@ -3595,6 +3596,8 @@ public class AdapterMessage extends RecyclerView.Adapter