diff --git a/spring-test/src/main/java/org/springframework/mock/web/MockHttpServletRequest.java b/spring-test/src/main/java/org/springframework/mock/web/MockHttpServletRequest.java index 7592528b62..f1d54c4d3a 100644 --- a/spring-test/src/main/java/org/springframework/mock/web/MockHttpServletRequest.java +++ b/spring-test/src/main/java/org/springframework/mock/web/MockHttpServletRequest.java @@ -488,7 +488,8 @@ public class MockHttpServletRequest implements HttpServletRequest { } catch (IllegalArgumentException ex) { // Try to get charset value anyway - int charsetIndex = contentType.toLowerCase().indexOf(CHARSET_PREFIX); + contentType = contentType.toLowerCase(); + int charsetIndex = contentType.indexOf(CHARSET_PREFIX); if (charsetIndex != -1) { this.characterEncoding = contentType.substring(charsetIndex + CHARSET_PREFIX.length()); } diff --git a/spring-test/src/test/java/org/springframework/mock/web/MockHttpServletRequestTests.java b/spring-test/src/test/java/org/springframework/mock/web/MockHttpServletRequestTests.java index 3015d43c4f..f2713d2618 100644 --- a/spring-test/src/test/java/org/springframework/mock/web/MockHttpServletRequestTests.java +++ b/spring-test/src/test/java/org/springframework/mock/web/MockHttpServletRequestTests.java @@ -185,6 +185,15 @@ class MockHttpServletRequestTests { assertThat(request.getCharacterEncoding()).isEqualTo("UTF-8"); } + @Test // gh-29255 + void setContentTypeInvalidWithNonAsciiCharacterAndCharset() { + String contentType = "İcharset="; + request.addHeader(HttpHeaders.CONTENT_TYPE, contentType); + assertThat(request.getContentType()).isEqualTo(contentType); + assertThat(request.getHeader(HttpHeaders.CONTENT_TYPE)).isEqualTo(contentType); + assertThat(request.getCharacterEncoding()).isEqualTo(""); + } + @Test void contentTypeHeader() { String contentType = "test/plain"; diff --git a/spring-web/src/testFixtures/java/org/springframework/web/testfixture/servlet/MockHttpServletRequest.java b/spring-web/src/testFixtures/java/org/springframework/web/testfixture/servlet/MockHttpServletRequest.java index 74e1982bb3..065c37bf3a 100644 --- a/spring-web/src/testFixtures/java/org/springframework/web/testfixture/servlet/MockHttpServletRequest.java +++ b/spring-web/src/testFixtures/java/org/springframework/web/testfixture/servlet/MockHttpServletRequest.java @@ -488,7 +488,8 @@ public class MockHttpServletRequest implements HttpServletRequest { } catch (IllegalArgumentException ex) { // Try to get charset value anyway - int charsetIndex = contentType.toLowerCase().indexOf(CHARSET_PREFIX); + contentType = contentType.toLowerCase(); + int charsetIndex = contentType.indexOf(CHARSET_PREFIX); if (charsetIndex != -1) { this.characterEncoding = contentType.substring(charsetIndex + CHARSET_PREFIX.length()); }