Merge branch '6.1.x'
This commit is contained in:
		
						commit
						eda21c4d22
					
				| 
						 | 
					@ -140,11 +140,15 @@ public class ContentCachingResponseWrapper extends HttpServletResponseWrapper {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	@Override
 | 
						@Override
 | 
				
			||||||
	public void setContentLengthLong(long len) {
 | 
						public void setContentLengthLong(long len) {
 | 
				
			||||||
		if (len > Integer.MAX_VALUE) {
 | 
							setContentLength(toContentLengthInt(len));
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						private int toContentLengthInt(long contentLength) {
 | 
				
			||||||
 | 
							if (contentLength > Integer.MAX_VALUE) {
 | 
				
			||||||
			throw new IllegalArgumentException("Content-Length exceeds ContentCachingResponseWrapper's maximum (" +
 | 
								throw new IllegalArgumentException("Content-Length exceeds ContentCachingResponseWrapper's maximum (" +
 | 
				
			||||||
					Integer.MAX_VALUE + "): " + len);
 | 
										Integer.MAX_VALUE + "): " + contentLength);
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
		setContentLength((int) len);
 | 
							return (int) contentLength;
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	@Override
 | 
						@Override
 | 
				
			||||||
| 
						 | 
					@ -160,7 +164,7 @@ public class ContentCachingResponseWrapper extends HttpServletResponseWrapper {
 | 
				
			||||||
	@Override
 | 
						@Override
 | 
				
			||||||
	public void setHeader(String name, String value) {
 | 
						public void setHeader(String name, String value) {
 | 
				
			||||||
		if (HttpHeaders.CONTENT_LENGTH.equalsIgnoreCase(name)) {
 | 
							if (HttpHeaders.CONTENT_LENGTH.equalsIgnoreCase(name)) {
 | 
				
			||||||
			this.contentLength = Integer.valueOf(value);
 | 
								this.contentLength = toContentLengthInt(Long.parseLong(value));
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
		else {
 | 
							else {
 | 
				
			||||||
			super.setHeader(name, value);
 | 
								super.setHeader(name, value);
 | 
				
			||||||
| 
						 | 
					@ -170,7 +174,7 @@ public class ContentCachingResponseWrapper extends HttpServletResponseWrapper {
 | 
				
			||||||
	@Override
 | 
						@Override
 | 
				
			||||||
	public void addHeader(String name, String value) {
 | 
						public void addHeader(String name, String value) {
 | 
				
			||||||
		if (HttpHeaders.CONTENT_LENGTH.equalsIgnoreCase(name)) {
 | 
							if (HttpHeaders.CONTENT_LENGTH.equalsIgnoreCase(name)) {
 | 
				
			||||||
			this.contentLength = Integer.valueOf(value);
 | 
								this.contentLength = toContentLengthInt(Long.parseLong(value));
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
		else {
 | 
							else {
 | 
				
			||||||
			super.addHeader(name, value);
 | 
								super.addHeader(name, value);
 | 
				
			||||||
| 
						 | 
					@ -180,7 +184,7 @@ public class ContentCachingResponseWrapper extends HttpServletResponseWrapper {
 | 
				
			||||||
	@Override
 | 
						@Override
 | 
				
			||||||
	public void setIntHeader(String name, int value) {
 | 
						public void setIntHeader(String name, int value) {
 | 
				
			||||||
		if (HttpHeaders.CONTENT_LENGTH.equalsIgnoreCase(name)) {
 | 
							if (HttpHeaders.CONTENT_LENGTH.equalsIgnoreCase(name)) {
 | 
				
			||||||
			this.contentLength = Integer.valueOf(value);
 | 
								this.contentLength = value;
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
		else {
 | 
							else {
 | 
				
			||||||
			super.setIntHeader(name, value);
 | 
								super.setIntHeader(name, value);
 | 
				
			||||||
| 
						 | 
					@ -190,7 +194,7 @@ public class ContentCachingResponseWrapper extends HttpServletResponseWrapper {
 | 
				
			||||||
	@Override
 | 
						@Override
 | 
				
			||||||
	public void addIntHeader(String name, int value) {
 | 
						public void addIntHeader(String name, int value) {
 | 
				
			||||||
		if (HttpHeaders.CONTENT_LENGTH.equalsIgnoreCase(name)) {
 | 
							if (HttpHeaders.CONTENT_LENGTH.equalsIgnoreCase(name)) {
 | 
				
			||||||
			this.contentLength = Integer.valueOf(value);
 | 
								this.contentLength = value;
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
		else {
 | 
							else {
 | 
				
			||||||
			super.addIntHeader(name, value);
 | 
								super.addIntHeader(name, value);
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -31,6 +31,7 @@ import org.springframework.web.util.ContentCachingResponseWrapper;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import static java.nio.charset.StandardCharsets.UTF_8;
 | 
					import static java.nio.charset.StandardCharsets.UTF_8;
 | 
				
			||||||
import static org.assertj.core.api.Assertions.assertThat;
 | 
					import static org.assertj.core.api.Assertions.assertThat;
 | 
				
			||||||
 | 
					import static org.assertj.core.api.Assertions.assertThatIllegalArgumentException;
 | 
				
			||||||
import static org.junit.jupiter.api.Named.named;
 | 
					import static org.junit.jupiter.api.Named.named;
 | 
				
			||||||
import static org.springframework.http.HttpHeaders.CONTENT_LENGTH;
 | 
					import static org.springframework.http.HttpHeaders.CONTENT_LENGTH;
 | 
				
			||||||
import static org.springframework.http.HttpHeaders.CONTENT_TYPE;
 | 
					import static org.springframework.http.HttpHeaders.CONTENT_TYPE;
 | 
				
			||||||
| 
						 | 
					@ -233,6 +234,43 @@ class ContentCachingResponseWrapperTests {
 | 
				
			||||||
		assertThat(response.getContentAsByteArray()).isEqualTo(responseBody);
 | 
							assertThat(response.getContentAsByteArray()).isEqualTo(responseBody);
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						@Test
 | 
				
			||||||
 | 
						void setContentLengthAbove2GbViaSetContentLengthLong() {
 | 
				
			||||||
 | 
							MockHttpServletResponse response = new MockHttpServletResponse();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							ContentCachingResponseWrapper responseWrapper = new ContentCachingResponseWrapper(response);
 | 
				
			||||||
 | 
							long overflow = (long) Integer.MAX_VALUE + 1;
 | 
				
			||||||
 | 
							assertThatIllegalArgumentException()
 | 
				
			||||||
 | 
									.isThrownBy(() -> responseWrapper.setContentLengthLong(overflow))
 | 
				
			||||||
 | 
									.withMessageContaining("Content-Length exceeds ContentCachingResponseWrapper's maximum")
 | 
				
			||||||
 | 
									.withMessageContaining(String.valueOf(overflow));
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						@Test
 | 
				
			||||||
 | 
						void setContentLengthAbove2GbViaAddHeader() {
 | 
				
			||||||
 | 
							MockHttpServletResponse response = new MockHttpServletResponse();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							ContentCachingResponseWrapper responseWrapper = new ContentCachingResponseWrapper(response);
 | 
				
			||||||
 | 
							String overflow = String.valueOf((long) Integer.MAX_VALUE + 1);
 | 
				
			||||||
 | 
							assertThatIllegalArgumentException()
 | 
				
			||||||
 | 
									.isThrownBy(() -> responseWrapper.addHeader(CONTENT_LENGTH, overflow))
 | 
				
			||||||
 | 
									.withMessageContaining("Content-Length exceeds ContentCachingResponseWrapper's maximum")
 | 
				
			||||||
 | 
									.withMessageContaining(overflow);
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						@Test
 | 
				
			||||||
 | 
						void setContentLengthAbove2GbViaSetHeader() {
 | 
				
			||||||
 | 
							MockHttpServletResponse response = new MockHttpServletResponse();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							ContentCachingResponseWrapper responseWrapper = new ContentCachingResponseWrapper(response);
 | 
				
			||||||
 | 
							String overflow = String.valueOf((long) Integer.MAX_VALUE + 1);
 | 
				
			||||||
 | 
							assertThatIllegalArgumentException()
 | 
				
			||||||
 | 
									.isThrownBy(() -> responseWrapper.setHeader(CONTENT_LENGTH, overflow))
 | 
				
			||||||
 | 
									.withMessageContaining("Content-Length exceeds ContentCachingResponseWrapper's maximum")
 | 
				
			||||||
 | 
									.withMessageContaining(overflow);
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	private void assertHeader(HttpServletResponse response, String header, int value) {
 | 
						private void assertHeader(HttpServletResponse response, String header, int value) {
 | 
				
			||||||
		assertHeader(response, header, Integer.toString(value));
 | 
							assertHeader(response, header, Integer.toString(value));
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
		Reference in New Issue