Fix DataUri scheme handler in image-loader

This commit is contained in:
Dimitry Ivanov 2018-10-25 22:08:15 +03:00
parent f78f153f9c
commit fed3d1fe33
2 changed files with 34 additions and 3 deletions

View File

@ -3,7 +3,6 @@ package ru.noties.markwon.il;
import android.net.Uri; import android.net.Uri;
import android.support.annotation.NonNull; import android.support.annotation.NonNull;
import android.support.annotation.Nullable; import android.support.annotation.Nullable;
import android.text.TextUtils;
import java.io.ByteArrayInputStream; import java.io.ByteArrayInputStream;
import java.util.Collection; import java.util.Collection;
@ -19,7 +18,7 @@ public class DataUriSchemeHandler extends SchemeHandler {
return new DataUriSchemeHandler(DataUriParser.create(), DataUriDecoder.create()); 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 DataUriParser uriParser;
private final DataUriDecoder uriDecoder; private final DataUriDecoder uriDecoder;
@ -38,7 +37,12 @@ public class DataUriSchemeHandler extends SchemeHandler {
return null; 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); final DataUri dataUri = uriParser.parse(part);
if (dataUri == null) { if (dataUri == null) {

View File

@ -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<String, Item> expected = new HashMap<String, Item>() {{
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<String, Item> 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 @NonNull
private static String readStream(@NonNull InputStream stream) { private static String readStream(@NonNull InputStream stream) {
try { try {