Skip to content

Commit a0f07af

Browse files
committed
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
1 parent 97e12bd commit a0f07af

File tree

2 files changed

+12
-4
lines changed

2 files changed

+12
-4
lines changed

Diff for: spring-test/src/main/java/org/springframework/mock/web/MockHttpServletRequest.java

+1-4
Original file line numberDiff line numberDiff line change
@@ -100,9 +100,6 @@ public class MockHttpServletRequest implements HttpServletRequest {
100100

101101
private static final TimeZone GMT = TimeZone.getTimeZone("GMT");
102102

103-
private static final BufferedReader EMPTY_BUFFERED_READER =
104-
new BufferedReader(new StringReader(""));
105-
106103
/**
107104
* Date formats as specified in the HTTP RFC.
108105
* @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 @@ else if (this.inputStream != null) {
736733
this.reader = new BufferedReader(sourceReader);
737734
}
738735
else {
739-
this.reader = EMPTY_BUFFERED_READER;
736+
this.reader = new BufferedReader(new StringReader(""));
740737
}
741738
return this.reader;
742739
}

Diff for: spring-test/src/test/java/org/springframework/mock/web/MockHttpServletRequestTests.java

+11
Original file line numberDiff line numberDiff line change
@@ -93,6 +93,17 @@ void readEmptyInputStreamWorksAcrossRequests() throws IOException {
9393
secondRequest.getInputStream().close();
9494
}
9595

96+
@Test // gh-32820
97+
void readEmptyReaderWorksAcrossRequests() throws IOException {
98+
MockHttpServletRequest firstRequest = new MockHttpServletRequest();
99+
firstRequest.getReader().read(new char[256]);
100+
firstRequest.getReader().close();
101+
102+
MockHttpServletRequest secondRequest = new MockHttpServletRequest();
103+
secondRequest.getReader().read(new char[256]);
104+
secondRequest.getReader().close();
105+
}
106+
96107
@Test
97108
void setContentAndGetReader() throws IOException {
98109
byte[] bytes = "body".getBytes(Charset.defaultCharset());

0 commit comments

Comments
 (0)