Browse Source

Avoid reader on empty content to be shared by multiple requests

This commit avoids several instances of MockHttpServletRequest to
have a common reader for empty content as closing it will have an
unwanted side effect on the others.

Closes gh-32848
pull/33048/head
Stéphane Nicoll 2 years ago
parent
commit
a0f07af375
  1. 5
      spring-test/src/main/java/org/springframework/mock/web/MockHttpServletRequest.java
  2. 11
      spring-test/src/test/java/org/springframework/mock/web/MockHttpServletRequestTests.java

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

@ -100,9 +100,6 @@ public class MockHttpServletRequest implements HttpServletRequest { @@ -100,9 +100,6 @@ public class MockHttpServletRequest implements HttpServletRequest {
private static final TimeZone GMT = TimeZone.getTimeZone("GMT");
private static final BufferedReader EMPTY_BUFFERED_READER =
new BufferedReader(new StringReader(""));
/**
* Date formats as specified in the HTTP RFC.
* @see <a href="https://tools.ietf.org/html/rfc7231#section-7.1.1.1">Section 7.1.1.1 of RFC 7231</a>
@ -736,7 +733,7 @@ public class MockHttpServletRequest implements HttpServletRequest { @@ -736,7 +733,7 @@ public class MockHttpServletRequest implements HttpServletRequest {
this.reader = new BufferedReader(sourceReader);
}
else {
this.reader = EMPTY_BUFFERED_READER;
this.reader = new BufferedReader(new StringReader(""));
}
return this.reader;
}

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

@ -93,6 +93,17 @@ class MockHttpServletRequestTests { @@ -93,6 +93,17 @@ class MockHttpServletRequestTests {
secondRequest.getInputStream().close();
}
@Test // gh-32820
void readEmptyReaderWorksAcrossRequests() throws IOException {
MockHttpServletRequest firstRequest = new MockHttpServletRequest();
firstRequest.getReader().read(new char[256]);
firstRequest.getReader().close();
MockHttpServletRequest secondRequest = new MockHttpServletRequest();
secondRequest.getReader().read(new char[256]);
secondRequest.getReader().close();
}
@Test
void setContentAndGetReader() throws IOException {
byte[] bytes = "body".getBytes(Charset.defaultCharset());

Loading…
Cancel
Save