diff --git a/app/src/main/java/eu/faircode/email/HtmlHelper.java b/app/src/main/java/eu/faircode/email/HtmlHelper.java index 1bef901a97..0a552499ea 100644 --- a/app/src/main/java/eu/faircode/email/HtmlHelper.java +++ b/app/src/main/java/eu/faircode/email/HtmlHelper.java @@ -74,9 +74,11 @@ import static androidx.core.text.HtmlCompat.FROM_HTML_SEPARATOR_LINE_BREAK_LIST_ import static androidx.core.text.HtmlCompat.TO_HTML_PARAGRAPH_LINES_CONSECUTIVE; public class HtmlHelper { - static final int PREVIEW_SIZE = 250; + static final int PREVIEW_SIZE = 250; // characters - private static final int TRACKING_PIXEL_SURFACE = 25; + private static final int MAX_LINKS = 50; + private static final int MAX_SIZE = 50 * 1024; // characters + private static final int TRACKING_PIXEL_SURFACE = 25; // pixels private static final List heads = Collections.unmodifiableList(Arrays.asList( "h1", "h2", "h3", "h4", "h5", "h6", "p", "ol", "ul", "table", "br", "hr")); @@ -124,6 +126,10 @@ public class HtmlHelper { } } + int links = parsed.select("a").size(); + if (links > MAX_LINKS || parsed.text().length() > MAX_SIZE) + return "" + context.getString(R.string.title_hint_too_complex) + ""; + Whitelist whitelist = Whitelist.relaxed() .addTags("hr", "abbr") .removeTags("col", "colgroup", "thead", "tbody") @@ -266,6 +272,8 @@ public class HtmlHelper { PatternsCompat.AUTOLINK_WEB_URL.pattern()); NodeTraversor.traverse(new NodeVisitor() { + private int alinks = links; + @Override public void head(Node node, int depth) { if (node instanceof TextNode) { @@ -294,7 +302,7 @@ public class HtmlHelper { " " + matcher.start() + "..." + matcher.end() + "/" + text.length() + " linked=" + linked + " email=" + email); - if (linked) + if (linked || alinks >= MAX_LINKS) span.appendText(text.substring(pos, matcher.end())); else { span.appendText(text.substring(pos, matcher.start())); @@ -303,6 +311,8 @@ public class HtmlHelper { a.attr("href", (email ? "mailto:" : "") + matcher.group()); a.text(matcher.group()); span.appendChild(a); + + alinks++; } pos = matcher.end(); diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index ccede99ae4..c3ee244afc 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -756,6 +756,7 @@ Long press a message to start selecting multiple messages Downloading messages can take some time, depending on the speed of the provider, internet connection and device and on the number of messages. While downloading messages the app might respond slower. Image link + Message too large or too complex to display Tracking image %1$sx%2$s Long press for options