From bcdd05a0bc7fc565c3f19399dc616cc2519f66fc Mon Sep 17 00:00:00 2001 From: Josh Cummings Date: Tue, 20 Aug 2019 13:29:52 -0600 Subject: [PATCH] Add OnCommittedResponseWrapper.setContentLengthLong Add setContentLengthLong tracking to OnCommittedResponseWrapper in order to detect commits on servlets that use setContentLengthLong to announce the entity size they are about to write (as used in the Apache Tomcat's DefaultServlet). Fixes gh-1489 --- .../session/web/http/OnCommittedResponseWrapper.java | 6 ++++++ .../web/http/OnCommittedResponseWrapperTests.java | 11 +++++++++++ 2 files changed, 17 insertions(+) diff --git a/spring-session-core/src/main/java/org/springframework/session/web/http/OnCommittedResponseWrapper.java b/spring-session-core/src/main/java/org/springframework/session/web/http/OnCommittedResponseWrapper.java index db372111..595cf41e 100644 --- a/spring-session-core/src/main/java/org/springframework/session/web/http/OnCommittedResponseWrapper.java +++ b/spring-session-core/src/main/java/org/springframework/session/web/http/OnCommittedResponseWrapper.java @@ -69,6 +69,12 @@ abstract class OnCommittedResponseWrapper extends HttpServletResponseWrapper { super.addHeader(name, value); } + @Override + public void setContentLengthLong(long len) { + setContentLength(len); + super.setContentLengthLong(len); + } + @Override public void setContentLength(int len) { setContentLength((long) len); diff --git a/spring-session-core/src/test/java/org/springframework/session/web/http/OnCommittedResponseWrapperTests.java b/spring-session-core/src/test/java/org/springframework/session/web/http/OnCommittedResponseWrapperTests.java index a8415471..0d61eb7d 100644 --- a/spring-session-core/src/test/java/org/springframework/session/web/http/OnCommittedResponseWrapperTests.java +++ b/spring-session-core/src/test/java/org/springframework/session/web/http/OnCommittedResponseWrapperTests.java @@ -1100,6 +1100,17 @@ class OnCommittedResponseWrapperTests { assertThat(this.committed).isTrue(); } + // gh-7261 + @Test + void contentLengthLongOutputStreamWriteStringCommits() throws IOException { + String body = "something"; + this.response.setContentLengthLong(body.length()); + + this.response.getOutputStream().print(body); + + assertThat(this.committed).isTrue(); + } + @Test void bufferSizeCommitsOnce() throws Exception { String expected = "1234567890";