Skip to content

Commit 481d036

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-32820
1 parent 2a2ef44 commit 481d036

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>
@@ -738,7 +735,7 @@ else if (this.inputStream != null) {
738735
this.reader = new BufferedReader(sourceReader);
739736
}
740737
else {
741-
this.reader = EMPTY_BUFFERED_READER;
738+
this.reader = new BufferedReader(new StringReader(""));
742739
}
743740
return this.reader;
744741
}

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)