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 6cf7e00107..decf391887 100644 --- a/spring-core/src/main/java/org/springframework/util/MimeTypeUtils.java +++ b/spring-core/src/main/java/org/springframework/util/MimeTypeUtils.java @@ -288,8 +288,8 @@ public abstract class MimeTypeUtils { } int eqIndex = parameter.indexOf('='); if (eqIndex >= 0) { - String attribute = parameter.substring(0, eqIndex); - String value = parameter.substring(eqIndex + 1, parameter.length()); + String attribute = parameter.substring(0, eqIndex).trim(); + String value = parameter.substring(eqIndex + 1, parameter.length()).trim(); parameters.put(attribute, 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 c5bdb9d4cf..f855a5f28b 100644 --- a/spring-core/src/test/java/org/springframework/util/MimeTypeTests.java +++ b/spring-core/src/test/java/org/springframework/util/MimeTypeTests.java @@ -241,6 +241,18 @@ public class MimeTypeTests { assertEquals("'v>alue'", mimeType.getParameter("attr")); } + @Test // SPR-16630 + public void parseMimeTypeWithSpacesAroundEquals() { + MimeType mimeType = MimeTypeUtils.parseMimeType("multipart/x-mixed-replace;boundary = --myboundary"); + assertEquals("--myboundary", mimeType.getParameter("boundary")); + } + + @Test // SPR-16630 + public void parseMimeTypeWithSpacesAroundEqualsAndQuotedValue() { + MimeType mimeType = MimeTypeUtils.parseMimeType("text/plain; foo = \" bar \" "); + assertEquals("\" bar \"", mimeType.getParameter("foo")); + } + @Test(expected = InvalidMimeTypeException.class) public void parseMimeTypeIllegalQuotedParameterValue() { MimeTypeUtils.parseMimeType("audio/*;attr=\"");