diff --git a/spring-core/src/main/java/org/springframework/util/MimeTypeUtils.java b/spring-core/src/main/java/org/springframework/util/MimeTypeUtils.java index b97877970c4..663ca1006c6 100644 --- a/spring-core/src/main/java/org/springframework/util/MimeTypeUtils.java +++ b/spring-core/src/main/java/org/springframework/util/MimeTypeUtils.java @@ -23,8 +23,8 @@ import java.util.ArrayList; import java.util.Collection; import java.util.Collections; import java.util.Iterator; -import java.util.LinkedHashMap; import java.util.List; +import java.util.Locale; import java.util.Map; import java.util.Random; import java.util.function.BiPredicate; @@ -437,7 +437,7 @@ public abstract class MimeTypeUtils { private void putParameter(String name, String value) { if (this.parameters == null) { - this.parameters = new LinkedHashMap<>(4); + this.parameters = new LinkedCaseInsensitiveMap<>(4, Locale.ROOT); } if (this.parameters.put(name, value) != null) { throw new InvalidMimeTypeException(this.input, "duplicate parameter '" + name + "=" + value + "'"); diff --git a/spring-core/src/test/java/org/springframework/util/MimeTypeTests.java b/spring-core/src/test/java/org/springframework/util/MimeTypeTests.java index bef9ebfde42..fa4327520f0 100644 --- a/spring-core/src/test/java/org/springframework/util/MimeTypeTests.java +++ b/spring-core/src/test/java/org/springframework/util/MimeTypeTests.java @@ -174,6 +174,12 @@ class MimeTypeTests { .hasMessageContaining("Invalid mime type \"text/plain;dupe=\"1\";dupe=\"2\"\": duplicate parameter 'dupe=\"2\"'"); } + @Test + void valueOfDuplicateParameterWithDifferentCase() { + assertThatThrownBy(() -> MimeType.valueOf("text/plain;dupe=\"1\";DUPE=\"2\"")).isInstanceOf(InvalidMimeTypeException.class) + .hasMessageContaining("Invalid mime type \"text/plain;dupe=\"1\";DUPE=\"2\"\": duplicate parameter 'DUPE=\"2\"'"); + } + }