From fed3d1fe334b9ab7ca1dbb9fb3a1c8b5c025f3a5 Mon Sep 17 00:00:00 2001 From: Dimitry Ivanov Date: Thu, 25 Oct 2018 22:08:15 +0300 Subject: [PATCH] Fix DataUri scheme handler in image-loader --- .../markwon/il/DataUriSchemeHandler.java | 10 ++++--- .../markwon/il/DataUriSchemeHandlerTest.java | 27 +++++++++++++++++++ 2 files changed, 34 insertions(+), 3 deletions(-) diff --git a/markwon-image-loader/src/main/java/ru/noties/markwon/il/DataUriSchemeHandler.java b/markwon-image-loader/src/main/java/ru/noties/markwon/il/DataUriSchemeHandler.java index 73f415af..260cc5b6 100644 --- a/markwon-image-loader/src/main/java/ru/noties/markwon/il/DataUriSchemeHandler.java +++ b/markwon-image-loader/src/main/java/ru/noties/markwon/il/DataUriSchemeHandler.java @@ -3,7 +3,6 @@ package ru.noties.markwon.il; import android.net.Uri; import android.support.annotation.NonNull; import android.support.annotation.Nullable; -import android.text.TextUtils; import java.io.ByteArrayInputStream; import java.util.Collection; @@ -19,7 +18,7 @@ public class DataUriSchemeHandler extends SchemeHandler { return new DataUriSchemeHandler(DataUriParser.create(), DataUriDecoder.create()); } - private static final String START = "data://"; + private static final String START = "data:"; private final DataUriParser uriParser; private final DataUriDecoder uriDecoder; @@ -38,7 +37,12 @@ public class DataUriSchemeHandler extends SchemeHandler { return null; } - final String part = raw.substring(START.length()); + String part = raw.substring(START.length()); + + // this part is added to support `data://` with which this functionality was released + if (part.startsWith("//")) { + part = part.substring(2); + } final DataUri dataUri = uriParser.parse(part); if (dataUri == null) { diff --git a/markwon-image-loader/src/test/java/ru/noties/markwon/il/DataUriSchemeHandlerTest.java b/markwon-image-loader/src/test/java/ru/noties/markwon/il/DataUriSchemeHandlerTest.java index 5274c5fb..1473744a 100644 --- a/markwon-image-loader/src/test/java/ru/noties/markwon/il/DataUriSchemeHandlerTest.java +++ b/markwon-image-loader/src/test/java/ru/noties/markwon/il/DataUriSchemeHandlerTest.java @@ -71,6 +71,33 @@ public class DataUriSchemeHandlerTest { } } + @Test + public void correct_real() { + + final class Item { + + final String contentType; + final String data; + + Item(String contentType, String data) { + this.contentType = contentType; + this.data = data; + } + } + + final Map expected = new HashMap() {{ + put("data:text/plain;,123", new Item("text/plain", "123")); + put("data:image/svg+xml;base64,MTIz", new Item("image/svg+xml", "123")); + }}; + + for (Map.Entry entry : expected.entrySet()) { + final ImageItem item = handler.handle(entry.getKey(), Uri.parse(entry.getKey())); + assertNotNull(entry.getKey(), item); + assertEquals(entry.getKey(), entry.getValue().contentType, item.contentType()); + assertEquals(entry.getKey(), entry.getValue().data, readStream(item.inputStream())); + } + } + @NonNull private static String readStream(@NonNull InputStream stream) { try {