From 1e233b930c46ad9525f9978d39649f48648000ba Mon Sep 17 00:00:00 2001
From: Emmanuel Bourg <ebourg@apache.org>
Date: Fri, 23 Jun 2017 10:42:58 +0200
Subject: [PATCH] New upstream version 1.3.3

---
 NOTICE.txt                                    |  2 +-
 RELEASE-NOTES.txt                             | 10 ++---
 pom.xml                                       | 30 +++++++++++----
 src/changes/changes.xml                       |  8 +++-
 src/changes/release-notes.vm                  |  2 +-
 src/main/assembly/bin.xml                     | 11 ++++--
 .../commons/fileupload/DefaultFileItem.java   |  2 +-
 .../fileupload/DefaultFileItemFactory.java    |  2 +-
 .../commons/fileupload/DiskFileUpload.java    |  2 +-
 .../apache/commons/fileupload/FileItem.java   |  2 +-
 .../commons/fileupload/FileItemFactory.java   |  2 +-
 .../commons/fileupload/FileItemIterator.java  |  2 +-
 .../commons/fileupload/FileItemStream.java    |  2 +-
 .../apache/commons/fileupload/FileUpload.java |  2 +-
 .../commons/fileupload/FileUploadBase.java    |  2 +-
 .../fileupload/FileUploadException.java       |  2 +-
 .../fileupload/InvalidFileNameException.java  |  2 +-
 .../commons/fileupload/MultipartStream.java   |  2 +-
 .../commons/fileupload/ParameterParser.java   |  2 +-
 .../commons/fileupload/ProgressListener.java  |  2 +-
 .../commons/fileupload/RequestContext.java    |  2 +-
 .../commons/fileupload/disk/DiskFileItem.java | 12 +++++-
 .../fileupload/disk/DiskFileItemFactory.java  |  2 +-
 .../fileupload/portlet/PortletFileUpload.java |  2 +-
 .../portlet/PortletRequestContext.java        |  2 +-
 .../servlet/FileCleanerCleanup.java           |  2 +-
 .../fileupload/servlet/ServletFileUpload.java |  2 +-
 .../servlet/ServletRequestContext.java        |  2 +-
 .../commons/fileupload/util/Closeable.java    |  2 +-
 .../fileupload/util/FileItemHeadersImpl.java  |  2 +-
 .../fileupload/util/LimitedInputStream.java   |  2 +-
 .../commons/fileupload/util/Streams.java      |  2 +-
 src/site/fml/faq.fml                          | 38 +++++++++++++++++++
 src/site/xdoc/download_fileupload.xml         | 26 ++++++-------
 src/site/xdoc/index.xml                       | 16 +++++++-
 .../fileupload/DefaultFileItemTest.java       |  2 +-
 .../fileupload/DiskFileItemSerializeTest.java | 20 +++++++---
 .../fileupload/FileUploadTestCase.java        |  2 +-
 .../fileupload/HttpServletRequestFactory.java |  2 +-
 .../fileupload/MockHttpServletRequest.java    |  2 +-
 .../fileupload/MultipartStreamTest.java       |  2 +-
 .../fileupload/ParameterParserTest.java       |  2 +-
 .../fileupload/ProgressListenerTest.java      |  2 +-
 .../fileupload/ServletFileUploadTest.java     |  2 +-
 .../apache/commons/fileupload/SizesTest.java  |  2 +-
 .../commons/fileupload/StreamingTest.java     |  2 +-
 46 files changed, 170 insertions(+), 75 deletions(-)

diff --git a/NOTICE.txt b/NOTICE.txt
index b72a517..5038a44 100644
--- a/NOTICE.txt
+++ b/NOTICE.txt
@@ -1,5 +1,5 @@
 Apache Commons FileUpload
-Copyright 2002-2016 The Apache Software Foundation
+Copyright 2002-2017 The Apache Software Foundation
 
 This product includes software developed at
 The Apache Software Foundation (http://www.apache.org/).
diff --git a/RELEASE-NOTES.txt b/RELEASE-NOTES.txt
index bc33acb..ac7e3c1 100644
--- a/RELEASE-NOTES.txt
+++ b/RELEASE-NOTES.txt
@@ -1,16 +1,16 @@
-              Apache Commons FileUpload 1.3.2 RELEASE NOTES
+              Apache Commons FileUpload 1.3.3 RELEASE NOTES
 
-The Apache Commons FileUpload team is pleased to announce the release of Apache Commons FileUpload 1.3.2.
+The Apache Commons FileUpload team is pleased to announce the release of Apache Commons FileUpload 1.3.3.
 
 The Apache Commons FileUpload component provides a simple yet flexible means of
 adding support for multipart file upload functionality to servlets and web
 applications. Version 1.3 onwards requires Java 5 or later.
 
-No client code changes are required to migrate from version 1.3.1 to 1.3.2.
+No client code changes are required to migrate from version 1.3.0, 1.3.1, or 1.3.2, to 1.3.3
 
-Changes in version 1.3.2 include:
+Changes in version 1.3.3 include:
 
-o FILEUPLOAD-272:  Performance Improvement in MultipartStream
+o FILEUPLOAD-279:  DiskFileItem can no longer be deserialized, unless a particular system property is set.
 
 
 For complete information on Apache Commons FileUpload, including instructions on how to submit bug reports,
diff --git a/pom.xml b/pom.xml
index 12ccb01..154f19c 100644
--- a/pom.xml
+++ b/pom.xml
@@ -21,12 +21,12 @@
   <parent>
     <groupId>org.apache.commons</groupId>
     <artifactId>commons-parent</artifactId>
-    <version>40</version>
+    <version>41</version>
   </parent>
 
   <groupId>commons-fileupload</groupId>
   <artifactId>commons-fileupload</artifactId>
-  <version>1.3.2</version>
+  <version>1.3.3</version>
 
   <name>Apache Commons FileUpload</name>
   <description>
@@ -97,6 +97,12 @@
       <email>ggregory@apache.org</email>
       <organization />
     </developer>
+    <developer>
+      <name>Rob Tompkins</name>
+      <id>chtompki</id>
+      <email>chtompki@apache.org</email>
+      <organization />
+    </developer>
   </developers>
 
   <contributors>
@@ -167,9 +173,10 @@
   </contributors>
 
   <scm>
-    <connection>scm:svn:http://svn.apache.org/repos/asf/commons/proper/fileupload/tags/FILEUPLOAD_1_3_2</connection>
-    <developerConnection>scm:svn:https://svn.apache.org/repos/asf/commons/proper/fileupload/tags/FILEUPLOAD_1_3_2</developerConnection>
-    <url>http://svn.apache.org/viewvc/commons/proper/fileupload/tags/FILEUPLOAD_1_3_2</url>
+    <connection>scm:git:http://git-wip-us.apache.org/repos/asf/commons-fileupload.git</connection>
+    <developerConnection>scm:git:https://git-wip-us.apache.org/repos/asf/commons-fileupload.git</developerConnection>
+    <url>https://git-wip-us.apache.org/repos/asf?p=commons-fileupload.git</url>
+    <tag>commons-fileupload-1.3.3-RC6</tag>
   </scm>
   <issueManagement>
     <system>jira</system>
@@ -181,13 +188,14 @@
     <maven.compiler.target>1.5</maven.compiler.target>
     <maven.compile.encoding>ISO-8859-1</maven.compile.encoding>
     <commons.componentid>fileupload</commons.componentid>
-    <commons.release.version>1.3.2</commons.release.version>
+    <commons.release.version>1.3.3</commons.release.version>
     <commons.rc.version>RC1</commons.rc.version>
     <commons.jira.id>FILEUPLOAD</commons.jira.id>
     <commons.jira.pid>12310476</commons.jira.pid>
     <commons.osgi.export>!org.apache.commons.fileupload.util.mime,org.apache.commons.*;version=${project.version};-noimport:=true</commons.osgi.export>
     <commons.osgi.import>!javax.portlet,*</commons.osgi.import>
     <commons.osgi.dynamicImport>javax.portlet</commons.osgi.dynamicImport>
+    <project.scm.id>git-wip-us.apache.org</project.scm.id>
   </properties>
 
   <dependencies>
@@ -232,12 +240,19 @@
         <artifactId>maven-release-plugin</artifactId>
         <configuration>
           <preparationGoals>clean site verify</preparationGoals>
-          <goals>deploy</goals>
+          <goals>clean site deploy</goals>
         </configuration>
       </plugin>
     </plugins>
     <pluginManagement>
     	<plugins>
+    	    <plugin>
+    	      <groupId>org.apache.maven.plugins</groupId>
+    	      <artifactId>maven-release-plugin</artifactId>
+    	      <configuration>
+    	        <tagBase>https://svn.apache.org/repos/asf/commons/proper/fileupload/tags</tagBase>
+    	      </configuration>
+    	    </plugin>
     		<!--This plugin's configuration is used to store Eclipse m2e settings only. It has no influence on the Maven build itself.-->
     		<plugin>
     			<groupId>org.eclipse.m2e</groupId>
@@ -320,5 +335,4 @@
       </plugin>
     </plugins>
   </reporting>
-
 </project>
diff --git a/src/changes/changes.xml b/src/changes/changes.xml
index bc1b921..73f2613 100644
--- a/src/changes/changes.xml
+++ b/src/changes/changes.xml
@@ -43,7 +43,13 @@ The <action> type attribute can be add,update,fix,remove.
   </properties>
 
   <body>
-    <release version="1.3.2" description="Bugfix release for 1.3.1" date="tba">
+    <release version="1.3.3" description="Bugfix release for 1.3.2" date="tba">
+      <action issue="FILEUPLOAD-279" dev="jochen" type="fix">
+        DiskDileItem can actually no longer be deserialized, unless a system property is set to true.
+      </action>
+    </release>
+
+    <release version="1.3.2" description="Bugfix release for 1.3.1" date="2016.05-26">
       <action issue="FILEUPLOAD-272" dev="jochen" type="update">
         Performance Improvement in MultipartStream
       </action>
diff --git a/src/changes/release-notes.vm b/src/changes/release-notes.vm
index ddcbff7..5b2f547 100644
--- a/src/changes/release-notes.vm
+++ b/src/changes/release-notes.vm
@@ -22,7 +22,7 @@ The Apache Commons FileUpload component provides a simple yet flexible means of
 adding support for multipart file upload functionality to servlets and web
 applications. Version 1.3 onwards requires Java 5 or later.
 
-No client code changes are required to migrate from version 1.3.0 to 1.3.1.
+No client code changes are required to migrate from version 1.3.0, 1.3.1, or 1.3.2 to 1.3.3.
 
 
 ## N.B. the available variables are described here:
diff --git a/src/main/assembly/bin.xml b/src/main/assembly/bin.xml
index d536d6e..353e51a 100644
--- a/src/main/assembly/bin.xml
+++ b/src/main/assembly/bin.xml
@@ -30,14 +30,19 @@
       <includes>
         <include>LICENSE.txt</include>
         <include>NOTICE.txt</include>
+        <include>RELEASE-NOTES.txt</include>
       </includes>
     </fileSet>
     <fileSet>
-      <directory>${project.build.directory}</directory>
-      <outputDirectory>lib</outputDirectory>
+      <directory>target</directory>
+      <outputDirectory></outputDirectory>
       <includes>
-        <include>${project.build.finalName}.jar</include>
+        <include>*.jar</include>
       </includes>
     </fileSet>
+    <fileSet>
+      <directory>target/site/apidocs</directory>
+      <outputDirectory>apidocs</outputDirectory>
+    </fileSet>
   </fileSets>
 </assembly>
diff --git a/src/main/java/org/apache/commons/fileupload/DefaultFileItem.java b/src/main/java/org/apache/commons/fileupload/DefaultFileItem.java
index 0265dd9..c5e4c8c 100644
--- a/src/main/java/org/apache/commons/fileupload/DefaultFileItem.java
+++ b/src/main/java/org/apache/commons/fileupload/DefaultFileItem.java
@@ -32,7 +32,7 @@ import org.apache.commons.fileupload.disk.DiskFileItem;
  * {@link #getInputStream()} and process the file without attempting to load
  * it into memory, which may come handy with large files.
  *
- * @version $Id: DefaultFileItem.java 1454690 2013-03-09 12:08:48Z simonetripodi $
+ * @version $Id$
  *
  * @deprecated 1.1 Use <code>DiskFileItem</code> instead.
  */
diff --git a/src/main/java/org/apache/commons/fileupload/DefaultFileItemFactory.java b/src/main/java/org/apache/commons/fileupload/DefaultFileItemFactory.java
index ea38062..6fecb37 100644
--- a/src/main/java/org/apache/commons/fileupload/DefaultFileItemFactory.java
+++ b/src/main/java/org/apache/commons/fileupload/DefaultFileItemFactory.java
@@ -36,7 +36,7 @@ import org.apache.commons.fileupload.disk.DiskFileItemFactory;
  *       <code>System.getProperty("java.io.tmpdir")</code>.</li>
  * </ul>
  *
- * @version $Id: DefaultFileItemFactory.java 1743630 2016-05-13 09:20:45Z jochen $
+ * @version $Id$
  *
  * @deprecated 1.1 Use <code>DiskFileItemFactory</code> instead.
  */
diff --git a/src/main/java/org/apache/commons/fileupload/DiskFileUpload.java b/src/main/java/org/apache/commons/fileupload/DiskFileUpload.java
index 97f3c9b..3b4c212 100644
--- a/src/main/java/org/apache/commons/fileupload/DiskFileUpload.java
+++ b/src/main/java/org/apache/commons/fileupload/DiskFileUpload.java
@@ -34,7 +34,7 @@ import javax.servlet.http.HttpServletRequest;
  * depending on their size, and will be available as {@link
  * org.apache.commons.fileupload.FileItem}s.</p>
  *
- * @version $Id: DiskFileUpload.java 1454690 2013-03-09 12:08:48Z simonetripodi $
+ * @version $Id$
  *
  * @deprecated 1.1 Use <code>ServletFileUpload</code> together with
  *             <code>DiskFileItemFactory</code> instead.
diff --git a/src/main/java/org/apache/commons/fileupload/FileItem.java b/src/main/java/org/apache/commons/fileupload/FileItem.java
index d1b5c18..484719f 100644
--- a/src/main/java/org/apache/commons/fileupload/FileItem.java
+++ b/src/main/java/org/apache/commons/fileupload/FileItem.java
@@ -43,7 +43,7 @@ import java.io.UnsupportedEncodingException;
  * implementation of this interface to also implement
  * <code>javax.activation.DataSource</code> with minimal additional work.
  *
- * @version $Id: FileItem.java 1454690 2013-03-09 12:08:48Z simonetripodi $
+ * @version $Id$
  * @since 1.3 additionally implements FileItemHeadersSupport
  */
 public interface FileItem extends Serializable, FileItemHeadersSupport {
diff --git a/src/main/java/org/apache/commons/fileupload/FileItemFactory.java b/src/main/java/org/apache/commons/fileupload/FileItemFactory.java
index 1e60b18..a576a33 100644
--- a/src/main/java/org/apache/commons/fileupload/FileItemFactory.java
+++ b/src/main/java/org/apache/commons/fileupload/FileItemFactory.java
@@ -21,7 +21,7 @@ package org.apache.commons.fileupload;
  * can provide their own custom configuration, over and above that provided
  * by the default file upload implementation.</p>
  *
- * @version $Id: FileItemFactory.java 1454690 2013-03-09 12:08:48Z simonetripodi $
+ * @version $Id$
  */
 public interface FileItemFactory {
 
diff --git a/src/main/java/org/apache/commons/fileupload/FileItemIterator.java b/src/main/java/org/apache/commons/fileupload/FileItemIterator.java
index 6c71cad..6c4e628 100644
--- a/src/main/java/org/apache/commons/fileupload/FileItemIterator.java
+++ b/src/main/java/org/apache/commons/fileupload/FileItemIterator.java
@@ -22,7 +22,7 @@ import java.io.IOException;
  * An iterator, as returned by
  * {@link FileUploadBase#getItemIterator(RequestContext)}.
  *
- * @version $Id: FileItemIterator.java 1454691 2013-03-09 12:15:54Z simonetripodi $
+ * @version $Id$
  */
 public interface FileItemIterator {
 
diff --git a/src/main/java/org/apache/commons/fileupload/FileItemStream.java b/src/main/java/org/apache/commons/fileupload/FileItemStream.java
index ef49b60..fbb4abc 100644
--- a/src/main/java/org/apache/commons/fileupload/FileItemStream.java
+++ b/src/main/java/org/apache/commons/fileupload/FileItemStream.java
@@ -31,7 +31,7 @@ import java.io.InputStream;
  * {@link java.util.Iterator#hasNext()} on the iterator, you discard all data,
  * which hasn't been read so far from the previous data.</p>
  *
- * @version $Id: FileItemStream.java 1454691 2013-03-09 12:15:54Z simonetripodi $
+ * @version $Id$
  */
 public interface FileItemStream extends FileItemHeadersSupport {
 
diff --git a/src/main/java/org/apache/commons/fileupload/FileUpload.java b/src/main/java/org/apache/commons/fileupload/FileUpload.java
index 7eb19ed..d70cef5 100644
--- a/src/main/java/org/apache/commons/fileupload/FileUpload.java
+++ b/src/main/java/org/apache/commons/fileupload/FileUpload.java
@@ -30,7 +30,7 @@ package org.apache.commons.fileupload;
  * used to create them; a given part may be in memory, on disk, or somewhere
  * else.</p>
  *
- * @version $Id: FileUpload.java 1454690 2013-03-09 12:08:48Z simonetripodi $
+ * @version $Id$
  */
 public class FileUpload
     extends FileUploadBase {
diff --git a/src/main/java/org/apache/commons/fileupload/FileUploadBase.java b/src/main/java/org/apache/commons/fileupload/FileUploadBase.java
index 6f2cdd6..b567bd9 100644
--- a/src/main/java/org/apache/commons/fileupload/FileUploadBase.java
+++ b/src/main/java/org/apache/commons/fileupload/FileUploadBase.java
@@ -53,7 +53,7 @@ import org.apache.commons.fileupload.util.Streams;
  * used to create them; a given part may be in memory, on disk, or somewhere
  * else.</p>
  *
- * @version $Id: FileUploadBase.java 1743630 2016-05-13 09:20:45Z jochen $
+ * @version $Id$
  */
 public abstract class FileUploadBase {
 
diff --git a/src/main/java/org/apache/commons/fileupload/FileUploadException.java b/src/main/java/org/apache/commons/fileupload/FileUploadException.java
index 799b43c..1c66cb8 100644
--- a/src/main/java/org/apache/commons/fileupload/FileUploadException.java
+++ b/src/main/java/org/apache/commons/fileupload/FileUploadException.java
@@ -22,7 +22,7 @@ import java.io.PrintWriter;
 /**
  * Exception for errors encountered while processing the request.
  *
- * @version $Id: FileUploadException.java 1454690 2013-03-09 12:08:48Z simonetripodi $
+ * @version $Id$
  */
 public class FileUploadException extends Exception {
 
diff --git a/src/main/java/org/apache/commons/fileupload/InvalidFileNameException.java b/src/main/java/org/apache/commons/fileupload/InvalidFileNameException.java
index 6b930ec..e58f6e8 100644
--- a/src/main/java/org/apache/commons/fileupload/InvalidFileNameException.java
+++ b/src/main/java/org/apache/commons/fileupload/InvalidFileNameException.java
@@ -26,7 +26,7 @@ package org.apache.commons.fileupload;
  * C library, it might create a file named "foo.exe", as the NUL
  * character is the string terminator in C.
  *
- * @version $Id: InvalidFileNameException.java 1454691 2013-03-09 12:15:54Z simonetripodi $
+ * @version $Id$
  */
 public class InvalidFileNameException extends RuntimeException {
 
diff --git a/src/main/java/org/apache/commons/fileupload/MultipartStream.java b/src/main/java/org/apache/commons/fileupload/MultipartStream.java
index 7007c7b..045dac3 100644
--- a/src/main/java/org/apache/commons/fileupload/MultipartStream.java
+++ b/src/main/java/org/apache/commons/fileupload/MultipartStream.java
@@ -81,7 +81,7 @@ import org.apache.commons.fileupload.util.Streams;
  *   }
  * </pre>
  *
- * @version $Id: MultipartStream.java 1745065 2016-05-22 14:56:37Z britter $
+ * @version $Id$
  */
 public class MultipartStream {
 
diff --git a/src/main/java/org/apache/commons/fileupload/ParameterParser.java b/src/main/java/org/apache/commons/fileupload/ParameterParser.java
index 892684c..3db521a 100644
--- a/src/main/java/org/apache/commons/fileupload/ParameterParser.java
+++ b/src/main/java/org/apache/commons/fileupload/ParameterParser.java
@@ -34,7 +34,7 @@ import org.apache.commons.fileupload.util.mime.MimeUtility;
  *  <code>param1 = value; param2 = "anything goes; really"; param3</code>
  * </p>
  *
- * @version $Id: ParameterParser.java 1565253 2014-02-06 13:48:16Z ggregory $
+ * @version $Id$
  */
 public class ParameterParser {
 
diff --git a/src/main/java/org/apache/commons/fileupload/ProgressListener.java b/src/main/java/org/apache/commons/fileupload/ProgressListener.java
index e65e362..30d7209 100644
--- a/src/main/java/org/apache/commons/fileupload/ProgressListener.java
+++ b/src/main/java/org/apache/commons/fileupload/ProgressListener.java
@@ -20,7 +20,7 @@ package org.apache.commons.fileupload;
  * The {@link ProgressListener} may be used to display a progress bar
  * or do stuff like that.
  *
- * @version $Id: ProgressListener.java 1454691 2013-03-09 12:15:54Z simonetripodi $
+ * @version $Id$
  */
 public interface ProgressListener {
 
diff --git a/src/main/java/org/apache/commons/fileupload/RequestContext.java b/src/main/java/org/apache/commons/fileupload/RequestContext.java
index 5812f61..bd2b83c 100644
--- a/src/main/java/org/apache/commons/fileupload/RequestContext.java
+++ b/src/main/java/org/apache/commons/fileupload/RequestContext.java
@@ -26,7 +26,7 @@ import java.io.IOException;
  *
  * @since FileUpload 1.1
  *
- * @version $Id: RequestContext.java 1455861 2013-03-13 10:12:09Z simonetripodi $
+ * @version $Id$
  */
 public interface RequestContext {
 
diff --git a/src/main/java/org/apache/commons/fileupload/disk/DiskFileItem.java b/src/main/java/org/apache/commons/fileupload/disk/DiskFileItem.java
index 550a7ed..00eda95 100644
--- a/src/main/java/org/apache/commons/fileupload/disk/DiskFileItem.java
+++ b/src/main/java/org/apache/commons/fileupload/disk/DiskFileItem.java
@@ -71,11 +71,17 @@ import org.apache.commons.io.output.DeferredFileOutputStream;
  *
  * @since FileUpload 1.1
  *
- * @version $Id: DiskFileItem.java 1565192 2014-02-06 12:14:16Z markt $
+ * @version $Id$
  */
 public class DiskFileItem
     implements FileItem {
 
+    /**
+     * Although it implements {@link java.io.Serializable}, a DiskFileItem can actually only be deserialized,
+     * if this System property is true.
+     */
+    public static final String SERIALIZABLE_PROPERTY = DiskFileItem.class.getName() + ".serializable";
+
     // ----------------------------------------------------- Manifest constants
 
     /**
@@ -654,6 +660,10 @@ public class DiskFileItem
      */
     private void readObject(ObjectInputStream in)
             throws IOException, ClassNotFoundException {
+        if (!Boolean.getBoolean(SERIALIZABLE_PROPERTY)) {
+            throw new IllegalStateException("Property " + SERIALIZABLE_PROPERTY
+                    + " is not true, rejecting to deserialize a DiskFileItem.");
+        }
         // read values
         in.defaultReadObject();
 
diff --git a/src/main/java/org/apache/commons/fileupload/disk/DiskFileItemFactory.java b/src/main/java/org/apache/commons/fileupload/disk/DiskFileItemFactory.java
index 7334338..7f31ff7 100644
--- a/src/main/java/org/apache/commons/fileupload/disk/DiskFileItemFactory.java
+++ b/src/main/java/org/apache/commons/fileupload/disk/DiskFileItemFactory.java
@@ -67,7 +67,7 @@ import org.apache.commons.io.FileCleaningTracker;
  *
  * @since FileUpload 1.1
  *
- * @version $Id: DiskFileItemFactory.java 1564788 2014-02-05 14:36:41Z markt $
+ * @version $Id$
  */
 public class DiskFileItemFactory implements FileItemFactory {
 
diff --git a/src/main/java/org/apache/commons/fileupload/portlet/PortletFileUpload.java b/src/main/java/org/apache/commons/fileupload/portlet/PortletFileUpload.java
index 2c1455d..3564f3f 100644
--- a/src/main/java/org/apache/commons/fileupload/portlet/PortletFileUpload.java
+++ b/src/main/java/org/apache/commons/fileupload/portlet/PortletFileUpload.java
@@ -46,7 +46,7 @@ import org.apache.commons.fileupload.FileUploadException;
  *
  * @since FileUpload 1.1
  *
- * @version $Id: PortletFileUpload.java 1455537 2013-03-12 14:06:11Z simonetripodi $
+ * @version $Id$
  */
 public class PortletFileUpload extends FileUpload {
 
diff --git a/src/main/java/org/apache/commons/fileupload/portlet/PortletRequestContext.java b/src/main/java/org/apache/commons/fileupload/portlet/PortletRequestContext.java
index c2b5d61..66a2e5c 100644
--- a/src/main/java/org/apache/commons/fileupload/portlet/PortletRequestContext.java
+++ b/src/main/java/org/apache/commons/fileupload/portlet/PortletRequestContext.java
@@ -32,7 +32,7 @@ import org.apache.commons.fileupload.UploadContext;
  *
  * @since FileUpload 1.1
  *
- * @version $Id: PortletRequestContext.java 1564788 2014-02-05 14:36:41Z markt $
+ * @version $Id$
  */
 public class PortletRequestContext implements UploadContext {
 
diff --git a/src/main/java/org/apache/commons/fileupload/servlet/FileCleanerCleanup.java b/src/main/java/org/apache/commons/fileupload/servlet/FileCleanerCleanup.java
index 8e6cbd0..e0aa5e1 100644
--- a/src/main/java/org/apache/commons/fileupload/servlet/FileCleanerCleanup.java
+++ b/src/main/java/org/apache/commons/fileupload/servlet/FileCleanerCleanup.java
@@ -27,7 +27,7 @@ import org.apache.commons.io.FileCleaningTracker;
  * {@link FileCleaningTracker}'s reaper thread is terminated,
  * when the web application is destroyed.
  *
- * @version $Id: FileCleanerCleanup.java 1564788 2014-02-05 14:36:41Z markt $
+ * @version $Id$
  */
 public class FileCleanerCleanup implements ServletContextListener {
 
diff --git a/src/main/java/org/apache/commons/fileupload/servlet/ServletFileUpload.java b/src/main/java/org/apache/commons/fileupload/servlet/ServletFileUpload.java
index 2ea1fd7..a7beb63 100644
--- a/src/main/java/org/apache/commons/fileupload/servlet/ServletFileUpload.java
+++ b/src/main/java/org/apache/commons/fileupload/servlet/ServletFileUpload.java
@@ -43,7 +43,7 @@ import org.apache.commons.fileupload.FileUploadException;
  * used to create them; a given part may be in memory, on disk, or somewhere
  * else.</p>
  *
- * @version $Id: ServletFileUpload.java 1455949 2013-03-13 14:14:44Z simonetripodi $
+ * @version $Id$
  */
 public class ServletFileUpload extends FileUpload {
 
diff --git a/src/main/java/org/apache/commons/fileupload/servlet/ServletRequestContext.java b/src/main/java/org/apache/commons/fileupload/servlet/ServletRequestContext.java
index 622dc5e..4b93846 100644
--- a/src/main/java/org/apache/commons/fileupload/servlet/ServletRequestContext.java
+++ b/src/main/java/org/apache/commons/fileupload/servlet/ServletRequestContext.java
@@ -32,7 +32,7 @@ import org.apache.commons.fileupload.UploadContext;
  *
  * @since FileUpload 1.1
  *
- * @version $Id: ServletRequestContext.java 1564788 2014-02-05 14:36:41Z markt $
+ * @version $Id$
  */
 public class ServletRequestContext implements UploadContext {
 
diff --git a/src/main/java/org/apache/commons/fileupload/util/Closeable.java b/src/main/java/org/apache/commons/fileupload/util/Closeable.java
index ae5da9c..dcef1ca 100644
--- a/src/main/java/org/apache/commons/fileupload/util/Closeable.java
+++ b/src/main/java/org/apache/commons/fileupload/util/Closeable.java
@@ -21,7 +21,7 @@ import java.io.IOException;
 /**
  * Interface of an object, which may be closed.
  *
- * @version $Id: Closeable.java 1454691 2013-03-09 12:15:54Z simonetripodi $
+ * @version $Id$
  */
 public interface Closeable {
 
diff --git a/src/main/java/org/apache/commons/fileupload/util/FileItemHeadersImpl.java b/src/main/java/org/apache/commons/fileupload/util/FileItemHeadersImpl.java
index d1bc97c..c593b9d 100644
--- a/src/main/java/org/apache/commons/fileupload/util/FileItemHeadersImpl.java
+++ b/src/main/java/org/apache/commons/fileupload/util/FileItemHeadersImpl.java
@@ -32,7 +32,7 @@ import org.apache.commons.fileupload.FileItemHeaders;
  *
  * @since 1.2.1
  *
- * @version $Id: FileItemHeadersImpl.java 1458379 2013-03-19 16:16:47Z britter $
+ * @version $Id$
  */
 public class FileItemHeadersImpl implements FileItemHeaders, Serializable {
 
diff --git a/src/main/java/org/apache/commons/fileupload/util/LimitedInputStream.java b/src/main/java/org/apache/commons/fileupload/util/LimitedInputStream.java
index b2a76dc..002d7da 100644
--- a/src/main/java/org/apache/commons/fileupload/util/LimitedInputStream.java
+++ b/src/main/java/org/apache/commons/fileupload/util/LimitedInputStream.java
@@ -24,7 +24,7 @@ import java.io.InputStream;
  * An input stream, which limits its data size. This stream is
  * used, if the content length is unknown.
  *
- * @version $Id: LimitedInputStream.java 1565292 2014-02-06 14:51:59Z ggregory $
+ * @version $Id$
  */
 public abstract class LimitedInputStream extends FilterInputStream implements Closeable {
 
diff --git a/src/main/java/org/apache/commons/fileupload/util/Streams.java b/src/main/java/org/apache/commons/fileupload/util/Streams.java
index eafd2d0..9e9d58b 100644
--- a/src/main/java/org/apache/commons/fileupload/util/Streams.java
+++ b/src/main/java/org/apache/commons/fileupload/util/Streams.java
@@ -27,7 +27,7 @@ import org.apache.commons.io.IOUtils;
 /**
  * Utility class for working with streams.
  *
- * @version $Id: Streams.java 1565332 2014-02-06 16:42:19Z ggregory $
+ * @version $Id$
  */
 public final class Streams {
 
diff --git a/src/site/fml/faq.fml b/src/site/fml/faq.fml
index 15bfc76..44ed791 100644
--- a/src/site/fml/faq.fml
+++ b/src/site/fml/faq.fml
@@ -174,4 +174,42 @@ try {
     </faq>
   </part>
 
+  <part id="security">
+    <title>FileUpload and Flash</title>
+
+    <faq id="diskfileitem-serializable">
+      <question> I have read, that there is a security problem in Commons FileUpload, because there is a class called
+        DiskFileItem, which can be used for malicious attacks.
+      </question>
+      <answer>
+        <p>
+          It is true, that this class exists, and can be serialized/deserialized in FileUpload versions, up to, and
+          including 1.3.2. It is also true, that a malicious attacker can abuse this possibility to create abitraryly
+          located files (assuming the required permissions) with arbitrary contents, if he gets the opportunity to
+          provide specially crafted data, which is being deserialized by a Java application, which has either of the
+          above versions of Commons FileUpload in the classpath, and which puts no limitations on the classes being
+          deserialized.
+        </p>
+        <p>
+          That being said, we (the Apache Commons team) hold the view, that the actual problem is not the DiskFileItem
+          class, but the "if" in the previous sentence. A Java application should carefully consider, which classes
+          can be deserialized. A typical approach would be, for example, to provide a blacklist, or whitelist of
+          packages, and/or classes, which may, or may not be deserialized.
+        </p>
+        <p>
+          On the other hand, we acknowledge, that the likelyhood of application container vendors taking such a
+          simple security measure is extremely low. So, in order to support the Commons Fileupload users, we have
+          decided to choose a different approach:
+        </p>
+        <p>
+          Beginning with 1.3.3, the class DiskFileItem is still implementing the interface java.io.Serializable.
+          In other words, it still declares itself as serializable, and deserializable to the JVM. In practice,
+          however, an attempt to deserialize an instance of DiskFileItem will trigger an Exception. In the unlikely
+          case, that your application depends on the deserialization of DiskFileItems, you can revert to the
+          previous behaviour by setting the system property "org.apache.commons.fileupload.disk.DiskFileItem.serializable"
+          to "true".
+        </p>
+      </answer>
+    </faq>
+  </part>
 </faqs>
diff --git a/src/site/xdoc/download_fileupload.xml b/src/site/xdoc/download_fileupload.xml
index ae4a5e6..ec57a1f 100644
--- a/src/site/xdoc/download_fileupload.xml
+++ b/src/site/xdoc/download_fileupload.xml
@@ -111,32 +111,32 @@ limitations under the License.
       </p>
     </subsection>
     </section>
-    <section name="Apache Commons FileUpload 1.3.2 ">
+    <section name="Apache Commons FileUpload 1.3.3 ">
       <subsection name="Binaries">
         <table>
           <tr>
-              <td><a href="[preferred]/commons/fileupload/binaries/commons-fileupload-1.3.2-bin.tar.gz">commons-fileupload-1.3.2-bin.tar.gz</a></td>
-              <td><a href="https://www.apache.org/dist/commons/fileupload/binaries/commons-fileupload-1.3.2-bin.tar.gz.md5">md5</a></td>
-              <td><a href="https://www.apache.org/dist/commons/fileupload/binaries/commons-fileupload-1.3.2-bin.tar.gz.asc">pgp</a></td>
+              <td><a href="[preferred]/commons/fileupload/binaries/commons-fileupload-1.3.3-bin.tar.gz">commons-fileupload-1.3.3-bin.tar.gz</a></td>
+              <td><a href="https://www.apache.org/dist/commons/fileupload/binaries/commons-fileupload-1.3.3-bin.tar.gz.md5">md5</a></td>
+              <td><a href="https://www.apache.org/dist/commons/fileupload/binaries/commons-fileupload-1.3.3-bin.tar.gz.asc">pgp</a></td>
           </tr>
           <tr>
-              <td><a href="[preferred]/commons/fileupload/binaries/commons-fileupload-1.3.2-bin.zip">commons-fileupload-1.3.2-bin.zip</a></td>
-              <td><a href="https://www.apache.org/dist/commons/fileupload/binaries/commons-fileupload-1.3.2-bin.zip.md5">md5</a></td>
-              <td><a href="https://www.apache.org/dist/commons/fileupload/binaries/commons-fileupload-1.3.2-bin.zip.asc">pgp</a></td>
+              <td><a href="[preferred]/commons/fileupload/binaries/commons-fileupload-1.3.3-bin.zip">commons-fileupload-1.3.3-bin.zip</a></td>
+              <td><a href="https://www.apache.org/dist/commons/fileupload/binaries/commons-fileupload-1.3.3-bin.zip.md5">md5</a></td>
+              <td><a href="https://www.apache.org/dist/commons/fileupload/binaries/commons-fileupload-1.3.3-bin.zip.asc">pgp</a></td>
           </tr>
         </table>
       </subsection>
       <subsection name="Source">
         <table>
           <tr>
-              <td><a href="[preferred]/commons/fileupload/source/commons-fileupload-1.3.2-src.tar.gz">commons-fileupload-1.3.2-src.tar.gz</a></td>
-              <td><a href="https://www.apache.org/dist/commons/fileupload/source/commons-fileupload-1.3.2-src.tar.gz.md5">md5</a></td>
-              <td><a href="https://www.apache.org/dist/commons/fileupload/source/commons-fileupload-1.3.2-src.tar.gz.asc">pgp</a></td>
+              <td><a href="[preferred]/commons/fileupload/source/commons-fileupload-1.3.3-src.tar.gz">commons-fileupload-1.3.3-src.tar.gz</a></td>
+              <td><a href="https://www.apache.org/dist/commons/fileupload/source/commons-fileupload-1.3.3-src.tar.gz.md5">md5</a></td>
+              <td><a href="https://www.apache.org/dist/commons/fileupload/source/commons-fileupload-1.3.3-src.tar.gz.asc">pgp</a></td>
           </tr>
           <tr>
-              <td><a href="[preferred]/commons/fileupload/source/commons-fileupload-1.3.2-src.zip">commons-fileupload-1.3.2-src.zip</a></td>
-              <td><a href="https://www.apache.org/dist/commons/fileupload/source/commons-fileupload-1.3.2-src.zip.md5">md5</a></td>
-              <td><a href="https://www.apache.org/dist/commons/fileupload/source/commons-fileupload-1.3.2-src.zip.asc">pgp</a></td>
+              <td><a href="[preferred]/commons/fileupload/source/commons-fileupload-1.3.3-src.zip">commons-fileupload-1.3.3-src.zip</a></td>
+              <td><a href="https://www.apache.org/dist/commons/fileupload/source/commons-fileupload-1.3.3-src.zip.md5">md5</a></td>
+              <td><a href="https://www.apache.org/dist/commons/fileupload/source/commons-fileupload-1.3.3-src.zip.asc">pgp</a></td>
           </tr>
         </table>
       </subsection>
diff --git a/src/site/xdoc/index.xml b/src/site/xdoc/index.xml
index 1a99d22..c9c0148 100644
--- a/src/site/xdoc/index.xml
+++ b/src/site/xdoc/index.xml
@@ -67,16 +67,28 @@
 
     <section name="Downloading">
       <subsection name="Full Releases">
-        <p><strong>FileUpload 1.3</strong> - 27 March 2013</p>
+        <p><strong>FileUpload 1.3.2</strong> - 26 May 2016</p>
         <ul>
           <li>Download the binary and source distributions from a mirror site
             <a href="http://commons.apache.org/fileupload/download_fileupload.cgi">here</a>
           </li>
         </ul>
+        <p><strong>FileUpload 1.3.1</strong> - 7 February 2014</p>
+        <ul>
+          <li>Download the binary and source distributions from the archive site
+            <a href="http://archive.apache.org/dist/commons/fileupload/">here</a>
+          </li>
+        </ul>
+        <p><strong>FileUpload 1.3</strong> - 27 March 2013</p>
+        <ul>
+          <li>Download the binary and source distributions from a mirror site
+            <a href="http://archive.apache.org/dist/commons/fileupload/">here</a>
+          </li>
+        </ul>
         <p><strong>FileUpload 1.2.2</strong> - 29 July 2010</p>
         <ul>
           <li>Download the binary and source distributions from a mirror site
-            <a href="http://commons.apache.org/fileupload/download_fileupload.cgi">here</a>
+            <a href="http://archive.apache.org/dist/commons/fileupload/">here</a>
           </li>
         </ul>
         <p><strong>FileUpload 1.2.1</strong> - 18 January 2008</p>
diff --git a/src/test/java/org/apache/commons/fileupload/DefaultFileItemTest.java b/src/test/java/org/apache/commons/fileupload/DefaultFileItemTest.java
index 7bacf50..cf27803 100644
--- a/src/test/java/org/apache/commons/fileupload/DefaultFileItemTest.java
+++ b/src/test/java/org/apache/commons/fileupload/DefaultFileItemTest.java
@@ -33,7 +33,7 @@ import org.junit.Test;
 /**
  * Unit tests for {@link org.apache.commons.fileupload.DefaultFileItem}.
  *
- * @version $Id: DefaultFileItemTest.java 1565246 2014-02-06 13:40:52Z ggregory $
+ * @version $Id$
  */
 @SuppressWarnings({"deprecation", "javadoc"}) // unit tests for deprecated class
 public class DefaultFileItemTest {
diff --git a/src/test/java/org/apache/commons/fileupload/DiskFileItemSerializeTest.java b/src/test/java/org/apache/commons/fileupload/DiskFileItemSerializeTest.java
index 89c07d8..fb8e6e1 100644
--- a/src/test/java/org/apache/commons/fileupload/DiskFileItemSerializeTest.java
+++ b/src/test/java/org/apache/commons/fileupload/DiskFileItemSerializeTest.java
@@ -30,18 +30,22 @@ import java.io.ObjectInputStream;
 import java.io.ObjectOutputStream;
 import java.io.OutputStream;
 
+import org.apache.commons.fileupload.disk.DiskFileItem;
 import org.apache.commons.fileupload.disk.DiskFileItemFactory;
 import org.junit.Test;
 
+
 /**
  * Serialization Unit tests for
  *  {@link org.apache.commons.fileupload.disk.DiskFileItem}.
  *
- * @version $Id: DiskFileItemSerializeTest.java 1507048 2013-07-25 16:16:15Z markt $
+ * @version $Id$
  */
 public class DiskFileItemSerializeTest {
 
-    /**
+    private static final String ERRMSG_DISKFILEITEM_DESERIALIZED = "Property org.apache.commons.fileupload.disk.DiskFileItem.serializable is not true, rejecting to deserialize a DiskFileItem.";
+
+	/**
      * Content type for regular form items.
      */
     private static final String textContentType = "text/plain";
@@ -63,7 +67,7 @@ public class DiskFileItemSerializeTest {
         compareBytes("Initial", item.get(), testFieldValueBytes);
 
         // Serialize & Deserialize
-        FileItem newItem = (FileItem)serializeDeserialize(item);
+        FileItem newItem =  (FileItem)serializeDeserialize(item);
 
         // Test deserialized content is as expected
         assertTrue("Check in memory", newItem.isInMemory());
@@ -154,13 +158,19 @@ public class DiskFileItemSerializeTest {
     /**
      * Test deserialization fails when repository contains a null character.
      */
-    @Test(expected=IOException.class)
+    @Test
     public void testInvalidRepositoryWithNullChar() throws Exception {
         // Create the FileItem
         byte[] testFieldValueBytes = createContentBytes(threshold);
         File repository = new File(System.getProperty("java.io.tmpdir") + "\0");
         FileItem item = createFileItem(testFieldValueBytes, repository);
-        deserialize(serialize(item));
+        try {
+        	deserialize(serialize(item));
+        	fail("Expected Exception");
+        } catch (IllegalStateException e) {
+        	assertEquals(ERRMSG_DISKFILEITEM_DESERIALIZED, e.getMessage());
+        }
+        System.setProperty(DiskFileItem.SERIALIZABLE_PROPERTY, "true");
     }
 
     /**
diff --git a/src/test/java/org/apache/commons/fileupload/FileUploadTestCase.java b/src/test/java/org/apache/commons/fileupload/FileUploadTestCase.java
index d5310f8..131985b 100644
--- a/src/test/java/org/apache/commons/fileupload/FileUploadTestCase.java
+++ b/src/test/java/org/apache/commons/fileupload/FileUploadTestCase.java
@@ -27,7 +27,7 @@ import org.apache.commons.fileupload.servlet.ServletFileUpload;
 /**
  * Base class for deriving test cases.
  *
- * @version $Id: FileUploadTestCase.java 1454693 2013-03-09 12:30:27Z simonetripodi $
+ * @version $Id$
  */
 public abstract class FileUploadTestCase {
 
diff --git a/src/test/java/org/apache/commons/fileupload/HttpServletRequestFactory.java b/src/test/java/org/apache/commons/fileupload/HttpServletRequestFactory.java
index 924aaeb..0f478dd 100644
--- a/src/test/java/org/apache/commons/fileupload/HttpServletRequestFactory.java
+++ b/src/test/java/org/apache/commons/fileupload/HttpServletRequestFactory.java
@@ -19,7 +19,7 @@ package org.apache.commons.fileupload;
 import javax.servlet.http.HttpServletRequest;
 
 /**
- * @version $Id: HttpServletRequestFactory.java 1565246 2014-02-06 13:40:52Z ggregory $
+ * @version $Id$
  */
 final class HttpServletRequestFactory {
 
diff --git a/src/test/java/org/apache/commons/fileupload/MockHttpServletRequest.java b/src/test/java/org/apache/commons/fileupload/MockHttpServletRequest.java
index 63225dd..f324929 100644
--- a/src/test/java/org/apache/commons/fileupload/MockHttpServletRequest.java
+++ b/src/test/java/org/apache/commons/fileupload/MockHttpServletRequest.java
@@ -33,7 +33,7 @@ import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpSession;
 
 /**
- * @version $Id: MockHttpServletRequest.java 1565255 2014-02-06 13:49:17Z ggregory $
+ * @version $Id$
  */
 class MockHttpServletRequest implements HttpServletRequest {
 
diff --git a/src/test/java/org/apache/commons/fileupload/MultipartStreamTest.java b/src/test/java/org/apache/commons/fileupload/MultipartStreamTest.java
index 128046a..af708c1 100644
--- a/src/test/java/org/apache/commons/fileupload/MultipartStreamTest.java
+++ b/src/test/java/org/apache/commons/fileupload/MultipartStreamTest.java
@@ -26,7 +26,7 @@ import org.junit.Test;
 /**
  * Unit tests {@link org.apache.commons.fileupload.MultipartStream}.
  *
- * @version $Id: MultipartStreamTest.java 1565190 2014-02-06 12:01:48Z markt $
+ * @version $Id$
  */
 public class MultipartStreamTest {
 
diff --git a/src/test/java/org/apache/commons/fileupload/ParameterParserTest.java b/src/test/java/org/apache/commons/fileupload/ParameterParserTest.java
index db98d70..4e55c77 100644
--- a/src/test/java/org/apache/commons/fileupload/ParameterParserTest.java
+++ b/src/test/java/org/apache/commons/fileupload/ParameterParserTest.java
@@ -26,7 +26,7 @@ import org.junit.Test;
 /**
  * Unit tests for {@link ParameterParser}.
  *
- * @version $Id: ParameterParserTest.java 1455521 2013-03-12 13:18:01Z simonetripodi $
+ * @version $Id$
  */
 public class ParameterParserTest {
 
diff --git a/src/test/java/org/apache/commons/fileupload/ProgressListenerTest.java b/src/test/java/org/apache/commons/fileupload/ProgressListenerTest.java
index 8ad55c1..884f8f8 100644
--- a/src/test/java/org/apache/commons/fileupload/ProgressListenerTest.java
+++ b/src/test/java/org/apache/commons/fileupload/ProgressListenerTest.java
@@ -30,7 +30,7 @@ import org.junit.Test;
 /**
  * Tests the progress listener.
  *
- * @version $Id: ProgressListenerTest.java 1454693 2013-03-09 12:30:27Z simonetripodi $
+ * @version $Id$
  */
 public class ProgressListenerTest extends FileUploadTestCase {
 
diff --git a/src/test/java/org/apache/commons/fileupload/ServletFileUploadTest.java b/src/test/java/org/apache/commons/fileupload/ServletFileUploadTest.java
index 8d7503c..27c1ec8 100644
--- a/src/test/java/org/apache/commons/fileupload/ServletFileUploadTest.java
+++ b/src/test/java/org/apache/commons/fileupload/ServletFileUploadTest.java
@@ -36,7 +36,7 @@ import org.junit.Test;
 /**
  * Unit tests {@link org.apache.commons.fileupload.DiskFileUpload}.
  *
- * @version $Id: ServletFileUploadTest.java 1564788 2014-02-05 14:36:41Z markt $
+ * @version $Id$
  */
 @SuppressWarnings({"deprecation", "javadoc"}) // unit tests for deprecated class
 public class ServletFileUploadTest extends FileUploadTestCase {
diff --git a/src/test/java/org/apache/commons/fileupload/SizesTest.java b/src/test/java/org/apache/commons/fileupload/SizesTest.java
index 3e9354e..a2a6536 100644
--- a/src/test/java/org/apache/commons/fileupload/SizesTest.java
+++ b/src/test/java/org/apache/commons/fileupload/SizesTest.java
@@ -39,7 +39,7 @@ import org.junit.Test;
 /**
  * Unit test for items with varying sizes.
  *
- * @version $Id: SizesTest.java 1458684 2013-03-20 08:31:53Z simonetripodi $
+ * @version $Id$
  */
 public class SizesTest extends FileUploadTestCase {
 
diff --git a/src/test/java/org/apache/commons/fileupload/StreamingTest.java b/src/test/java/org/apache/commons/fileupload/StreamingTest.java
index 256c9f8..030c0ee 100644
--- a/src/test/java/org/apache/commons/fileupload/StreamingTest.java
+++ b/src/test/java/org/apache/commons/fileupload/StreamingTest.java
@@ -36,7 +36,7 @@ import junit.framework.TestCase;
 /**
  * Unit test for items with varying sizes.
  *
- * @version $Id: StreamingTest.java 1454693 2013-03-09 12:30:27Z simonetripodi $
+ * @version $Id$
  */
 public class StreamingTest extends TestCase {
 
-- 
GitLab