From f2605fd9e5e23895ae2dba61c72a1ffd406370e5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?St=C3=A9phane=20Nicoll?= Date: Mon, 20 May 2024 13:32:04 +0200 Subject: [PATCH] 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 --- .../mock/web/MockHttpServletRequest.java | 5 +---- .../mock/web/MockHttpServletRequestTests.java | 11 +++++++++++ 2 files changed, 12 insertions(+), 4 deletions(-) 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 9a6c18f63c..0880440d02 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 @@ -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 Section 7.1.1.1 of RFC 7231 @@ -738,7 +735,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; } 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 033bf360cf..963846482b 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 @@ -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());