From 03d2d484807b53b1a45d00ccb2ab533075007689 Mon Sep 17 00:00:00 2001 From: Dennis Ushakov Date: Fri, 29 Mar 2019 17:44:26 +0300 Subject: [PATCH] url decode non-base64 text (WEB-37256) --- platform/util/src/com/intellij/util/io/URLUtil.java | 9 +++------ .../util/testSrc/com/intellij/util/io/UrlUtilTest.java | 8 +++++++- 2 files changed, 10 insertions(+), 7 deletions(-) diff --git a/platform/util/src/com/intellij/util/io/URLUtil.java b/platform/util/src/com/intellij/util/io/URLUtil.java index b8139d555074..41d30e7250a7 100644 --- a/platform/util/src/com/intellij/util/io/URLUtil.java +++ b/platform/util/src/com/intellij/util/io/URLUtil.java @@ -10,10 +10,7 @@ import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import java.io.*; -import java.net.MalformedURLException; -import java.net.URISyntaxException; -import java.net.URL; -import java.net.URLEncoder; +import java.net.*; import java.nio.charset.StandardCharsets; import java.util.Base64; import java.util.regex.Matcher; @@ -247,9 +244,9 @@ public class URLUtil { String content = matcher.group(4); return ";base64".equalsIgnoreCase(matcher.group(3)) ? Base64.getDecoder().decode(content) - : content.getBytes(StandardCharsets.UTF_8); + : URLDecoder.decode(content, CharsetToolkit.UTF8).getBytes(StandardCharsets.UTF_8); } - catch (IllegalArgumentException e) { + catch (IllegalArgumentException | UnsupportedEncodingException e) { return null; } } diff --git a/platform/util/testSrc/com/intellij/util/io/UrlUtilTest.java b/platform/util/testSrc/com/intellij/util/io/UrlUtilTest.java index d6787cf57182..a4b4fcc665d2 100644 --- a/platform/util/testSrc/com/intellij/util/io/UrlUtilTest.java +++ b/platform/util/testSrc/com/intellij/util/io/UrlUtilTest.java @@ -112,13 +112,19 @@ public class UrlUtilTest { } @Test - public void testDataUri() { + public void testDataUriBase64() { byte[] test = "test".getBytes(CharsetToolkit.UTF8_CHARSET); assertThat(URLUtil.getBytesFromDataUri("data:text/plain;charset=utf-8;base64,dGVzdA==")).isEqualTo(test); // https://youtrack.jetbrains.com/issue/WEB-14581#comment=27-1014790 assertThat(URLUtil.getBytesFromDataUri("data:text/plain;charset:utf-8;base64,dGVzdA==")).isEqualTo(test); } + @Test + public void testDataUri() { + byte[] test = "Hello world!".getBytes(CharsetToolkit.UTF8_CHARSET); + assertThat(URLUtil.getBytesFromDataUri("data:text/plain;charset=utf-8,Hello%20world!")).isEqualTo(test); + } + private static void doUrlTest(@NotNull final String line, @Nullable final String expectedUrl) { final Matcher matcher = URLUtil.URL_PATTERN.matcher(line); boolean found = matcher.find();