MIME4J-324 Handle URL parsing exception in LenientContentDispositionField
diff --git a/core/src/main/java/org/apache/james/mime4j/util/MimeParameterMapping.java b/core/src/main/java/org/apache/james/mime4j/util/MimeParameterMapping.java
index 1e98ac4..a3ffd44 100644
--- a/core/src/main/java/org/apache/james/mime4j/util/MimeParameterMapping.java
+++ b/core/src/main/java/org/apache/james/mime4j/util/MimeParameterMapping.java
@@ -19,7 +19,6 @@
package org.apache.james.mime4j.util;
-import java.io.UnsupportedEncodingException;
import java.util.HashMap;
import java.util.Map;
@@ -54,9 +53,9 @@
try {
return java.net.URLDecoder.decode(fileName, charset);
}
- catch (UnsupportedEncodingException ignore) {
+ catch (Exception ignore) {
+ return fileName;
}
- return MimeUtil.unscrambleHeaderValue(value);
}
private String removeSectionFromName(String parameterName) {
diff --git a/dom/src/test/java/org/apache/james/mime4j/field/ContentDispositionFieldTest.java b/dom/src/test/java/org/apache/james/mime4j/field/ContentDispositionFieldTest.java
index 13326e2..fb1fb53 100644
--- a/dom/src/test/java/org/apache/james/mime4j/field/ContentDispositionFieldTest.java
+++ b/dom/src/test/java/org/apache/james/mime4j/field/ContentDispositionFieldTest.java
@@ -138,7 +138,7 @@
" \nfilename*=%s\"", fileName);
ContentDispositionField f = parse(fileNameString);
String name = f.getFilename();
- assertEquals(getMessage(f), fileName, name);
+ assertEquals(getMessage(f), "%D8%AF%D9%8A%D9%86%D8%A7%D8%B5%D9%88%D8%B1%2E%6F%64%74", name);
}
public void testFileNameWithInitialSection() throws MimeException {
diff --git a/dom/src/test/java/org/apache/james/mime4j/field/LenientContentDispositionFieldTest.java b/dom/src/test/java/org/apache/james/mime4j/field/LenientContentDispositionFieldTest.java
index 67df4c5..1031da7 100644
--- a/dom/src/test/java/org/apache/james/mime4j/field/LenientContentDispositionFieldTest.java
+++ b/dom/src/test/java/org/apache/james/mime4j/field/LenientContentDispositionFieldTest.java
@@ -197,4 +197,14 @@
f.getFilename());
}
+ @Test
+ public void testBadEncodingFilename() throws MimeException {
+ ContentDispositionField f = parse("Content-Disposition: attachment; \n" +
+ " filename*=utf-8''4%P001!.DOC;\n" +
+ " filename=\"4%P001!.DOC\"");
+
+ Assert.assertEquals(f.getDispositionType(), "attachment");
+ Assert.assertEquals(f.getFilename(), "4%P001!.DOC4%P001!.DOC");
+ }
+
}