From ea4c7fa8f2230a45a3524891ea2e2f8afa6f4199 Mon Sep 17 00:00:00 2001 From: M66B Date: Thu, 3 Oct 2019 18:19:22 +0200 Subject: [PATCH] Prevent Jsoup from throwing up --- .../eu/faircode/email/AdapterMessage.java | 7 ++-- app/src/main/java/eu/faircode/email/Core.java | 3 +- .../eu/faircode/email/FragmentCompose.java | 7 ++-- .../eu/faircode/email/FragmentMessages.java | 8 +--- .../java/eu/faircode/email/HtmlHelper.java | 9 ++--- .../main/java/eu/faircode/email/JsoupEx.java | 40 +++++++++++++++++++ .../java/eu/faircode/email/MessageHelper.java | 7 +--- 7 files changed, 55 insertions(+), 26 deletions(-) create mode 100644 app/src/main/java/eu/faircode/email/JsoupEx.java diff --git a/app/src/main/java/eu/faircode/email/AdapterMessage.java b/app/src/main/java/eu/faircode/email/AdapterMessage.java index 8ce726af66..5c1ccabbb5 100644 --- a/app/src/main/java/eu/faircode/email/AdapterMessage.java +++ b/app/src/main/java/eu/faircode/email/AdapterMessage.java @@ -124,7 +124,6 @@ import com.google.android.material.bottomnavigation.BottomNavigationView; import com.google.android.material.bottomnavigation.LabelVisibilityMode; import com.google.android.material.snackbar.Snackbar; -import org.jsoup.Jsoup; import org.jsoup.nodes.Document; import org.jsoup.nodes.Element; @@ -2672,7 +2671,7 @@ public class AdapterMessage extends RecyclerView.Adapter"); diff --git a/app/src/main/java/eu/faircode/email/FragmentCompose.java b/app/src/main/java/eu/faircode/email/FragmentCompose.java index 122274e15b..ba8d237d5f 100644 --- a/app/src/main/java/eu/faircode/email/FragmentCompose.java +++ b/app/src/main/java/eu/faircode/email/FragmentCompose.java @@ -103,7 +103,6 @@ import com.google.android.material.bottomnavigation.BottomNavigationView; import com.google.android.material.bottomnavigation.LabelVisibilityMode; import com.google.android.material.snackbar.Snackbar; -import org.jsoup.Jsoup; import org.jsoup.nodes.Document; import org.jsoup.nodes.Element; import org.jsoup.nodes.Node; @@ -1799,7 +1798,7 @@ public class FragmentCompose extends FragmentBase { } private boolean isEmpty() { - if (!TextUtils.isEmpty(Jsoup.parse(HtmlHelper.toHtml(etBody.getText())).text().trim())) + if (!TextUtils.isEmpty(JsoupEx.parse(HtmlHelper.toHtml(etBody.getText())).text().trim())) return false; if (rvAttachment.getAdapter().getItemCount() > 0) return false; @@ -2330,7 +2329,7 @@ public class FragmentCompose extends FragmentBase { boolean usenet = prefs.getBoolean("usenet_signature", false); if (usenet) { - Document rdoc = Jsoup.parse(refText); + Document rdoc = JsoupEx.parse(refText); List tbd = new ArrayList<>(); @@ -2832,7 +2831,7 @@ public class FragmentCompose extends FragmentBase { if (rfile.exists()) sb.append(Helper.readText(rfile)); List cids = new ArrayList<>(); - for (Element element : Jsoup.parse(sb.toString()).select("img")) { + for (Element element : JsoupEx.parse(sb.toString()).select("img")) { String src = element.attr("src"); if (src.startsWith("cid:")) cids.add("<" + src.substring(4) + ">"); diff --git a/app/src/main/java/eu/faircode/email/FragmentMessages.java b/app/src/main/java/eu/faircode/email/FragmentMessages.java index 36b492c3ba..d5c0e83ea0 100644 --- a/app/src/main/java/eu/faircode/email/FragmentMessages.java +++ b/app/src/main/java/eu/faircode/email/FragmentMessages.java @@ -107,7 +107,6 @@ import com.google.android.material.floatingactionbutton.FloatingActionButton; import com.google.android.material.snackbar.Snackbar; import com.sun.mail.util.FolderClosedIOException; -import org.jsoup.Jsoup; import org.jsoup.nodes.Document; import org.jsoup.nodes.Element; import org.openintents.openpgp.OpenPgpError; @@ -3870,8 +3869,7 @@ public class FragmentMessages extends FragmentBase implements SharedPreferences. db.beginTransaction(); // Write decrypted body - Helper.writeText(message.getFile(context), - decrypted.toString().replace("\0", "")); + Helper.writeText(message.getFile(context), decrypted.toString()); db.message().setMessageStored(id, new Date().getTime()); @@ -3894,8 +3892,6 @@ public class FragmentMessages extends FragmentBase implements SharedPreferences. // Write decrypted body String html = parts.getHtml(context); - if (html != null) - html = html.replace("\0", ""); Helper.writeText(message.getFile(context), html); // Remove previously decrypted attachments @@ -4336,7 +4332,7 @@ public class FragmentMessages extends FragmentBase implements SharedPreferences. return null; String html = Helper.readText(file); - Document document = Jsoup.parse(html); + Document document = JsoupEx.parse(html); HtmlHelper.embedImages(context, id, document); Element body = document.body(); diff --git a/app/src/main/java/eu/faircode/email/HtmlHelper.java b/app/src/main/java/eu/faircode/email/HtmlHelper.java index 5a41a3cc91..b6f978ae82 100644 --- a/app/src/main/java/eu/faircode/email/HtmlHelper.java +++ b/app/src/main/java/eu/faircode/email/HtmlHelper.java @@ -49,7 +49,6 @@ import androidx.core.text.HtmlCompat; import androidx.core.util.PatternsCompat; import androidx.preference.PreferenceManager; -import org.jsoup.Jsoup; import org.jsoup.nodes.Attribute; import org.jsoup.nodes.Document; import org.jsoup.nodes.Element; @@ -98,7 +97,7 @@ public class HtmlHelper { Executors.newSingleThreadExecutor(Helper.backgroundThreadFactory); static String sanitize(Context context, String html, boolean text_color, boolean show_images) { - Document parsed = Jsoup.parse(html); + Document parsed = JsoupEx.parse(html); // . + + Copyright 2018-2019 by Marcel Bokhorst (M66B) +*/ + +import org.jsoup.Jsoup; +import org.jsoup.nodes.Document; + +public class JsoupEx { + static Document parse(String html) { + +/* +org.jsoup.UncheckedIOException: java.io.IOException: Input is binary and unsupported + at org.jsoup.parser.CharacterReader.(SourceFile:38) + at org.jsoup.parser.CharacterReader.(SourceFile:43) + at org.jsoup.parser.TreeBuilder.initialiseParse(SourceFile:38) + at org.jsoup.parser.HtmlTreeBuilder.initialiseParse(SourceFile:65) + at org.jsoup.parser.TreeBuilder.parse(SourceFile:46) + at org.jsoup.parser.Parser.parse(SourceFile:107) + at org.jsoup.Jsoup.parse(SourceFile:58) +*/ + return Jsoup.parse(html.replace("\0", "")); + } +} diff --git a/app/src/main/java/eu/faircode/email/MessageHelper.java b/app/src/main/java/eu/faircode/email/MessageHelper.java index 023f357ed9..8c482ecc2c 100644 --- a/app/src/main/java/eu/faircode/email/MessageHelper.java +++ b/app/src/main/java/eu/faircode/email/MessageHelper.java @@ -32,7 +32,6 @@ import androidx.preference.PreferenceManager; import com.sun.mail.util.FolderClosedIOException; import com.sun.mail.util.MessageRemovedIOException; -import org.jsoup.Jsoup; import org.jsoup.nodes.Document; import java.io.BufferedReader; @@ -310,14 +309,14 @@ public class MessageHelper { StringBuilder body = new StringBuilder(); body.append(""); - Document mdoc = Jsoup.parse(Helper.readText(message.getFile(context))); + Document mdoc = JsoupEx.parse(Helper.readText(message.getFile(context))); if (mdoc.body() != null) body.append(mdoc.body().html()); // When sending message if (identity != null) { if (!TextUtils.isEmpty(identity.signature) && message.signature) { - Document sdoc = Jsoup.parse(identity.signature); + Document sdoc = JsoupEx.parse(identity.signature); if (sdoc.body() != null) { if (usenet) // https://www.ietf.org/rfc/rfc3676.txt body.append("--
"); @@ -1022,8 +1021,6 @@ public class MessageHelper { } // Prevent Jsoup throwing an exception - result = result.replace("\0", ""); - if (part == plain) { StringBuilder sb = new StringBuilder(); sb.append("");