You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@commons.apache.org by ba...@apache.org on 2007/09/05 11:21:20 UTC

svn commit: r572918 - in /commons/proper/fileupload/trunk/src: java/org/apache/commons/fileupload/FileUploadBase.java java/org/apache/commons/fileupload/ParameterParser.java test/org/apache/commons/fileupload/ParameterParserTest.java

Author: bayard
Date: Wed Sep  5 02:21:19 2007
New Revision: 572918

URL: http://svn.apache.org/viewvc?rev=572918&view=rev
Log:
Applying the patch from FILEUPLOAD-139 so that comma separators are supported (as per rfc1867) as well as semi-colons

Modified:
    commons/proper/fileupload/trunk/src/java/org/apache/commons/fileupload/FileUploadBase.java
    commons/proper/fileupload/trunk/src/java/org/apache/commons/fileupload/ParameterParser.java
    commons/proper/fileupload/trunk/src/test/org/apache/commons/fileupload/ParameterParserTest.java

Modified: commons/proper/fileupload/trunk/src/java/org/apache/commons/fileupload/FileUploadBase.java
URL: http://svn.apache.org/viewvc/commons/proper/fileupload/trunk/src/java/org/apache/commons/fileupload/FileUploadBase.java?rev=572918&r1=572917&r2=572918&view=diff
==============================================================================
--- commons/proper/fileupload/trunk/src/java/org/apache/commons/fileupload/FileUploadBase.java (original)
+++ commons/proper/fileupload/trunk/src/java/org/apache/commons/fileupload/FileUploadBase.java Wed Sep  5 02:21:19 2007
@@ -391,7 +391,7 @@
         ParameterParser parser = new ParameterParser();
         parser.setLowerCaseNames(true);
         // Parameter parser can handle null input
-        Map params = parser.parse(contentType, ';');
+        Map params = parser.parse(contentType, new char[] {';', ','});
         String boundaryStr = (String) params.get("boundary");
 
         if (boundaryStr == null) {

Modified: commons/proper/fileupload/trunk/src/java/org/apache/commons/fileupload/ParameterParser.java
URL: http://svn.apache.org/viewvc/commons/proper/fileupload/trunk/src/java/org/apache/commons/fileupload/ParameterParser.java?rev=572918&r1=572917&r2=572918&view=diff
==============================================================================
--- commons/proper/fileupload/trunk/src/java/org/apache/commons/fileupload/ParameterParser.java (original)
+++ commons/proper/fileupload/trunk/src/java/org/apache/commons/fileupload/ParameterParser.java Wed Sep  5 02:21:19 2007
@@ -216,6 +216,36 @@
 
     /**
      * Extracts a map of name/value pairs from the given string. Names are
+     * expected to be unique. Multiple separators may be specified and 
+     * the earliest found in the input string is used.
+     *
+     * @param str the string that contains a sequence of name/value pairs
+     * @param separator the name/value pairs separators
+     *
+     * @return a map of name/value pairs
+     */
+    public Map parse(final String str, char[] separators) {
+        if (separators == null || separators.length == 0) {
+            return new HashMap();
+        }
+        char separator = separators[0];
+        if (str != null) {
+            int idx = str.length();
+            for (int i=0; i<separators.length; i++) {
+                int tmp = str.indexOf(separators[i]);
+                if (tmp != -1) {
+                    if (tmp < idx) {
+                        idx = tmp;
+                        separator = separators[i];
+                    }
+                }
+            }
+        }
+        return parse(str, separator);
+    }
+
+    /**
+     * Extracts a map of name/value pairs from the given string. Names are
      * expected to be unique.
      *
      * @param str the string that contains a sequence of name/value pairs

Modified: commons/proper/fileupload/trunk/src/test/org/apache/commons/fileupload/ParameterParserTest.java
URL: http://svn.apache.org/viewvc/commons/proper/fileupload/trunk/src/test/org/apache/commons/fileupload/ParameterParserTest.java?rev=572918&r1=572917&r2=572918&view=diff
==============================================================================
--- commons/proper/fileupload/trunk/src/test/org/apache/commons/fileupload/ParameterParserTest.java (original)
+++ commons/proper/fileupload/trunk/src/test/org/apache/commons/fileupload/ParameterParserTest.java Wed Sep  5 02:21:19 2007
@@ -60,6 +60,12 @@
         assertEquals("stuff; stuff", params.get("test2"));
         assertEquals("\"stuff", params.get("test3"));
 
+        params = parser.parse(s, new char[] { ',', ';' });
+        assertEquals(null, params.get("test"));
+        assertEquals("stuff", params.get("test1"));
+        assertEquals("stuff; stuff", params.get("test2"));
+        assertEquals("\"stuff", params.get("test3"));
+
         s = "  test  , test1=stuff   ,  , test2=, test3, ";
         params = parser.parse(s, ',');
         assertEquals(null, params.get("test"));
@@ -102,5 +108,22 @@
         assertEquals(2, params.size());
         assertEquals("stuff\\\\", params.get("param"));
         assertNull(params.get("anotherparam"));
+    }
+
+    // See: http://issues.apache.org/jira/browse/FILEUPLOAD-139
+    public void testFileUpload139() 
+    {
+        ParameterParser parser = new ParameterParser();
+        String s = "Content-type: multipart/form-data , boundary=AaB03x";
+        Map params = parser.parse(s, new char[] { ',', ';' });
+        assertEquals("AaB03x", params.get("boundary"));
+
+        s = "Content-type: multipart/form-data, boundary=AaB03x";
+        params = parser.parse(s, new char[] { ';', ',' });
+        assertEquals("AaB03x", params.get("boundary"));
+
+        s = "Content-type: multipart/mixed, boundary=BbC04y";
+        params = parser.parse(s, new char[] { ',', ';' });
+        assertEquals("BbC04y", params.get("boundary"));
     }
 }