diff --git a/org.springframework.core/src/main/java/org/springframework/core/io/AbstractFileResolvingResource.java b/org.springframework.core/src/main/java/org/springframework/core/io/AbstractFileResolvingResource.java index a7857a7460..d285503697 100644 --- a/org.springframework.core/src/main/java/org/springframework/core/io/AbstractFileResolvingResource.java +++ b/org.springframework.core/src/main/java/org/springframework/core/io/AbstractFileResolvingResource.java @@ -129,7 +129,7 @@ public abstract class AbstractFileResolvingResource extends AbstractResource { } @Override - public int contentLength() throws IOException { + public long contentLength() throws IOException { URL url = getURL(); if (ResourceUtils.isFileURL(url)) { // Proceed with file system resolution... diff --git a/org.springframework.core/src/main/java/org/springframework/core/io/AbstractResource.java b/org.springframework.core/src/main/java/org/springframework/core/io/AbstractResource.java index 6cd0acdd01..fd5b62f932 100644 --- a/org.springframework.core/src/main/java/org/springframework/core/io/AbstractResource.java +++ b/org.springframework.core/src/main/java/org/springframework/core/io/AbstractResource.java @@ -112,8 +112,8 @@ public abstract class AbstractResource implements Resource { * if available. * @see #getFile() */ - public int contentLength() throws IOException { - return (int) getFile().length(); + public long contentLength() throws IOException { + return getFile().length(); } /** diff --git a/org.springframework.core/src/main/java/org/springframework/core/io/Resource.java b/org.springframework.core/src/main/java/org/springframework/core/io/Resource.java index f8ba779db4..e57a977644 100644 --- a/org.springframework.core/src/main/java/org/springframework/core/io/Resource.java +++ b/org.springframework.core/src/main/java/org/springframework/core/io/Resource.java @@ -96,7 +96,7 @@ public interface Resource extends InputStreamSource { * @throws IOException if the resource cannot be resolved * (in the file system or as some other known physical resource type) */ - int contentLength() throws IOException; + long contentLength() throws IOException; /** * Determine the last-modified timestamp for this resource. diff --git a/org.springframework.web.servlet/src/main/java/org/springframework/web/servlet/resource/ResourceHttpRequestHandler.java b/org.springframework.web.servlet/src/main/java/org/springframework/web/servlet/resource/ResourceHttpRequestHandler.java index 8b9b9ea2cc..fdf47d0a05 100644 --- a/org.springframework.web.servlet/src/main/java/org/springframework/web/servlet/resource/ResourceHttpRequestHandler.java +++ b/org.springframework.web.servlet/src/main/java/org/springframework/web/servlet/resource/ResourceHttpRequestHandler.java @@ -148,7 +148,11 @@ public class ResourceHttpRequestHandler extends WebContentGenerator implements H if (mediaType != null) { response.setContentType(mediaType.toString()); } - response.setContentLength(resource.contentLength()); + long length = resource.contentLength(); + if (length > Integer.MAX_VALUE) { + throw new IOException("Resource content too long (beyond Integer.MAX_VALUE): " + resource); + } + response.setContentLength((int) length); FileCopyUtils.copy(resource.getInputStream(), response.getOutputStream()); }