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 98a0c59caf492e62ffc4d8f7245b8518ebc01c0b..6212a210ea815d01fbfa5a090b2ef95f122a5362 100644 --- a/spring-core/src/main/java/org/springframework/util/MimeTypeUtils.java +++ b/spring-core/src/main/java/org/springframework/util/MimeTypeUtils.java @@ -225,8 +225,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 a22f06018e39908a64ca53044320cd55579946a8..904f230820b67b1d9fc0e22aa70bc7b3d96ece3a 100644 --- a/spring-core/src/test/java/org/springframework/util/MimeTypeTests.java +++ b/spring-core/src/test/java/org/springframework/util/MimeTypeTests.java @@ -247,6 +247,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=\"");