Browse Source

Fix StringIndexOutOfBoundsException

Closes gh-29588
pull/29946/head
rstoyanchev 2 years ago
parent
commit
9c0b28ffdc
  1. 3
      spring-test/src/main/java/org/springframework/mock/web/MockHttpServletRequest.java
  2. 9
      spring-test/src/test/java/org/springframework/mock/web/MockHttpServletRequestTests.java
  3. 3
      spring-web/src/testFixtures/java/org/springframework/web/testfixture/servlet/MockHttpServletRequest.java

3
spring-test/src/main/java/org/springframework/mock/web/MockHttpServletRequest.java

@ -488,7 +488,8 @@ public class MockHttpServletRequest implements HttpServletRequest { @@ -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());
}

9
spring-test/src/test/java/org/springframework/mock/web/MockHttpServletRequestTests.java

@ -185,6 +185,15 @@ class MockHttpServletRequestTests { @@ -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";

3
spring-web/src/testFixtures/java/org/springframework/web/testfixture/servlet/MockHttpServletRequest.java

@ -488,7 +488,8 @@ public class MockHttpServletRequest implements HttpServletRequest { @@ -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());
}

Loading…
Cancel
Save