diff --git a/config/alfresco/remote-api-context.xml b/config/alfresco/remote-api-context.xml
index 018dd362f6..e2ed0d8293 100644
--- a/config/alfresco/remote-api-context.xml
+++ b/config/alfresco/remote-api-context.xml
@@ -65,6 +65,9 @@
+
+ ${system.content.maximumFileSizeLimit}
+
diff --git a/source/java/org/alfresco/repo/webdav/WebDAVHelper.java b/source/java/org/alfresco/repo/webdav/WebDAVHelper.java
index 963c09dccd..91ba5cbb3d 100644
--- a/source/java/org/alfresco/repo/webdav/WebDAVHelper.java
+++ b/source/java/org/alfresco/repo/webdav/WebDAVHelper.java
@@ -115,6 +115,29 @@ public class WebDAVHelper
private String m_urlPathPrefix;
+ private long sizeLimit = -1L;
+
+ /**
+ * This method sets a value for the limit. If the string does not {@link Long#parseLong(String) parse} to a
+ * java long.
+ *
+ * @param limit a String representing a valid Java long.
+ */
+ public void setSizeLimitString(String limit)
+ {
+ // A string parameter is used here in order to not to require end users to provide a value for the limit in a property
+ // file. This results in the empty string being injected to this method.
+ long longLimit = -1L;
+ try
+ {
+ longLimit = Long.parseLong(limit);
+ } catch (NumberFormatException ignored)
+ {
+ // Intentionally empty
+ }
+ this.sizeLimit = longLimit;
+ }
+
/**
* Set the regular expression that will be applied to filenames during renames
* to detect whether clients are performing a renaming shuffle - common during
@@ -129,6 +152,14 @@ public class WebDAVHelper
this.m_renameShufflePattern = renameShufflePattern;
}
+ /**
+ * @return Return the limit size
+ */
+ public long getSizeLimit()
+ {
+ return sizeLimit;
+ }
+
/**
* @return Return the authentication service
*/
diff --git a/source/java/org/alfresco/repo/webdav/WebDAVMethod.java b/source/java/org/alfresco/repo/webdav/WebDAVMethod.java
index d3e32f7cb7..b7b70e0c4b 100644
--- a/source/java/org/alfresco/repo/webdav/WebDAVMethod.java
+++ b/source/java/org/alfresco/repo/webdav/WebDAVMethod.java
@@ -25,7 +25,6 @@ import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
-import java.io.OutputStream;
import java.net.SocketException;
import java.util.Date;
import java.util.HashMap;
@@ -46,8 +45,7 @@ import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
import org.alfresco.model.ContentModel;
-import org.alfresco.repo.model.filefolder.HiddenAspect;
-import org.alfresco.repo.model.filefolder.HiddenAspect.Visibility;
+import org.alfresco.repo.content.LimitedStreamCopier;
import org.alfresco.repo.security.authentication.AuthenticationUtil;
import org.alfresco.repo.security.authentication.AuthenticationUtil.RunAsWork;
import org.alfresco.repo.security.permissions.AccessDeniedException;
@@ -68,15 +66,12 @@ import org.alfresco.service.cmr.security.AuthenticationService;
import org.alfresco.service.cmr.security.PermissionService;
import org.alfresco.service.namespace.NamespaceService;
import org.alfresco.service.transaction.TransactionService;
-import org.alfresco.util.FileFilterMode;
-import org.alfresco.util.FileFilterMode.Client;
import org.alfresco.util.TempFileProvider;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.dom4j.DocumentHelper;
import org.dom4j.io.OutputFormat;
import org.dom4j.io.XMLWriter;
-import org.springframework.util.FileCopyUtils;
import org.w3c.dom.Document;
import org.xml.sax.Attributes;
import org.xml.sax.InputSource;
@@ -289,12 +284,15 @@ public abstract class WebDAVMethod
if (this.m_requestBody == null)
{
this.m_requestBody = TempFileProvider.createTempFile("webdav_" + req.getMethod() + "_", ".bin");
- OutputStream out = new FileOutputStream(this.m_requestBody);
- int bytesRead = FileCopyUtils.copy(req.getInputStream(), out);
+ // copy the streams
+ LimitedStreamCopier streamCopier = new LimitedStreamCopier();
+ long bytes = streamCopier.copyStreamsLong(req.getInputStream(), new FileOutputStream(this.m_requestBody), m_davHelper.getSizeLimit());
+
+ // get content length
+ long contentLength = Long.valueOf(req.getHeader(WebDAV.HEADER_CONTENT_LENGTH));
// ALF-7377: check for corrupt request
- int contentLength = req.getIntHeader(WebDAV.HEADER_CONTENT_LENGTH);
- if (contentLength >= 0 && contentLength != bytesRead)
+ if (contentLength >= 0 && contentLength != bytes)
{
throw new IOException("Request body does not have specified Content Length");
}