Add test for double encoded html in link preview tags.

This commit is contained in:
Cody Henthorne
2022-02-02 16:15:17 -05:00
parent f091502949
commit bf28dfee66
2 changed files with 25 additions and 16 deletions

View File

@@ -1,7 +1,6 @@
package org.thoughtcrime.securesms.linkpreview;
import android.annotation.SuppressLint;
import android.text.Html;
import android.text.SpannableString;
import android.text.TextUtils;
import android.text.style.URLSpan;
@@ -10,6 +9,7 @@ import android.text.util.Linkify;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.annotation.VisibleForTesting;
import androidx.core.text.HtmlCompat;
import androidx.core.text.util.LinkifyCompat;
import com.annimon.stream.Collectors;
@@ -100,11 +100,6 @@ public final class LinkPreviewUtil {
}
public static @NonNull OpenGraph parseOpenGraphFields(@Nullable String html) {
return parseOpenGraphFields(html, text -> Html.fromHtml(text).toString());
}
@VisibleForTesting
static @NonNull OpenGraph parseOpenGraphFields(@Nullable String html, @NonNull HtmlDecoder htmlDecoder) {
if (html == null) {
return new OpenGraph(Collections.emptyMap(), null, null);
}
@@ -119,7 +114,7 @@ public final class LinkPreviewUtil {
if (property != null) {
Matcher contentMatcher = OPEN_GRAPH_CONTENT_PATTERN.matcher(tag);
if (contentMatcher.find() && contentMatcher.groupCount() > 0) {
String content = htmlDecoder.fromEncoded(contentMatcher.group(1));
String content = fromDoubleEncoded(contentMatcher.group(1));
openGraphTags.put(property.toLowerCase(), content);
}
}
@@ -134,7 +129,7 @@ public final class LinkPreviewUtil {
if (property != null) {
Matcher contentMatcher = OPEN_GRAPH_CONTENT_PATTERN.matcher(tag);
if (contentMatcher.find() && contentMatcher.groupCount() > 0) {
String content = htmlDecoder.fromEncoded(contentMatcher.group(1));
String content = fromDoubleEncoded(contentMatcher.group(1));
openGraphTags.put(property.toLowerCase(), content);
}
}
@@ -145,7 +140,7 @@ public final class LinkPreviewUtil {
Matcher titleMatcher = TITLE_PATTERN.matcher(html);
if (titleMatcher.find() && titleMatcher.groupCount() > 0) {
htmlTitle = htmlDecoder.fromEncoded(titleMatcher.group(1));
htmlTitle = fromDoubleEncoded(titleMatcher.group(1));
}
Matcher faviconMatcher = FAVICON_PATTERN.matcher(html);
@@ -169,6 +164,9 @@ public final class LinkPreviewUtil {
}
}
private static @NonNull String fromDoubleEncoded(@NonNull String html) {
return HtmlCompat.fromHtml(HtmlCompat.fromHtml(html, 0).toString(), 0).toString();
}
public static final class OpenGraph {
@@ -216,10 +214,6 @@ public final class LinkPreviewUtil {
}
}
public interface HtmlDecoder {
@NonNull String fromEncoded(@NonNull String html);
}
public static class Links {
static final Links EMPTY = new Links(Collections.emptyList());