From c8bce9686f3dca2013aee875b3c86d87aa897662 Mon Sep 17 00:00:00 2001 From: Rossen Stoyanchev Date: Tue, 10 Dec 2019 15:38:28 +0000 Subject: [PATCH] ContentDisposition trims charset in filename Closes gh-24112 --- .../java/org/springframework/http/ContentDisposition.java | 2 +- .../org/springframework/http/ContentDispositionTests.java | 8 ++++++++ 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/spring-web/src/main/java/org/springframework/http/ContentDisposition.java b/spring-web/src/main/java/org/springframework/http/ContentDisposition.java index 37d912005751..ac77d45c7e65 100644 --- a/spring-web/src/main/java/org/springframework/http/ContentDisposition.java +++ b/spring-web/src/main/java/org/springframework/http/ContentDisposition.java @@ -282,7 +282,7 @@ else if (attribute.equals("filename*") ) { int idx1 = value.indexOf('\''); int idx2 = value.indexOf('\'', idx1 + 1); if (idx1 != -1 && idx2 != -1) { - charset = Charset.forName(value.substring(0, idx1)); + charset = Charset.forName(value.substring(0, idx1).trim()); Assert.isTrue(UTF_8.equals(charset) || ISO_8859_1.equals(charset), "Charset should be UTF-8 or ISO-8859-1"); filename = decodeFilename(value.substring(idx2 + 1), charset); diff --git a/spring-web/src/test/java/org/springframework/http/ContentDispositionTests.java b/spring-web/src/test/java/org/springframework/http/ContentDispositionTests.java index a647871b0e6b..26b5ae57eab8 100644 --- a/spring-web/src/test/java/org/springframework/http/ContentDispositionTests.java +++ b/spring-web/src/test/java/org/springframework/http/ContentDispositionTests.java @@ -70,6 +70,14 @@ public void parseEncodedFilename() { .build()); } + @Test // gh-24112 + public void parseEncodedFilenameWithPaddedCharset() { + assertThat(parse("attachment; filename*= UTF-8''some-file.zip")) + .isEqualTo(ContentDisposition.builder("attachment") + .filename("some-file.zip", StandardCharsets.UTF_8) + .build()); + } + @Test public void parseEncodedFilenameWithoutCharset() { assertThat(parse("form-data; name=\"name\"; filename*=test.txt"))