From faada70d592b31595c3898de3a7f7579b87dd8c0 Mon Sep 17 00:00:00 2001 From: Brian Clozel Date: Sun, 15 Jun 2025 18:42:45 +0200 Subject: [PATCH] Reset respone content-type for invalid range responses Prior to this commit, the `ResourceHttpRequestHandler` would detect invalid range requests and reply with a 416 response status and the relevant range header. Because this was triggering an error dispatch, the error handling would collect error metadata and produce an error response with the original content-type. This would most likely fail because the content-type is most likely a file-related media type which cannot be used for error responses. This commit resets the response content type in these cases and let the error handling pick the most sensible media type for the error response. Fixes gh- 34490 --- .../web/servlet/resource/ResourceHttpRequestHandler.java | 1 + .../web/servlet/resource/ResourceHttpRequestHandlerTests.java | 2 ++ 2 files changed, 3 insertions(+) diff --git a/spring-webmvc/src/main/java/org/springframework/web/servlet/resource/ResourceHttpRequestHandler.java b/spring-webmvc/src/main/java/org/springframework/web/servlet/resource/ResourceHttpRequestHandler.java index ba1b56338f6..e6e8178e10d 100644 --- a/spring-webmvc/src/main/java/org/springframework/web/servlet/resource/ResourceHttpRequestHandler.java +++ b/spring-webmvc/src/main/java/org/springframework/web/servlet/resource/ResourceHttpRequestHandler.java @@ -631,6 +631,7 @@ public class ResourceHttpRequestHandler extends WebContentGenerator HttpRange.toResourceRegions(httpRanges, resource), mediaType, outputMessage); } catch (IllegalArgumentException ex) { + response.setContentType(null); response.setHeader(HttpHeaders.CONTENT_RANGE, "bytes */" + resource.contentLength()); response.sendError(HttpServletResponse.SC_REQUESTED_RANGE_NOT_SATISFIABLE); } diff --git a/spring-webmvc/src/test/java/org/springframework/web/servlet/resource/ResourceHttpRequestHandlerTests.java b/spring-webmvc/src/test/java/org/springframework/web/servlet/resource/ResourceHttpRequestHandlerTests.java index 923a2b6a717..7c69d95f720 100644 --- a/spring-webmvc/src/test/java/org/springframework/web/servlet/resource/ResourceHttpRequestHandlerTests.java +++ b/spring-webmvc/src/test/java/org/springframework/web/servlet/resource/ResourceHttpRequestHandlerTests.java @@ -333,6 +333,8 @@ class ResourceHttpRequestHandlerTests { this.handler.handleRequest(this.request, this.response); assertThat(this.response.getStatus()).isEqualTo(416); + // MockHttpServletResponse does not reset content type in 6.2.x + //assertThat(this.response.getHeaderNames()).doesNotContain(HttpHeaders.CONTENT_TYPE); assertThat(this.response.getHeader("Content-Range")).isEqualTo("bytes */10"); assertThat(this.response.getHeader("Accept-Ranges")).isEqualTo("bytes"); assertThat(this.response.getHeaders("Accept-Ranges")).hasSize(1);