Author: olegk
Date: Wed Jan 8 19:20:25 2014
New Revision: 1556611
URL: http://svn.apache.org/r1556611
Log:
MIME4J-235: Content-Type fields containing RFC 2231 formatted boundary
attribute cause NPE
Modified:
james/mime4j/branches/apache-mime4j-0.7/core/src/main/java/org/apache/james/mime4j/stream/FallbackBodyDescriptorBuilder.java
james/mime4j/branches/apache-mime4j-0.7/core/src/main/java/org/apache/james/mime4j/stream/MimeEntity.java
james/mime4j/branches/apache-mime4j-0.7/core/src/test/java/org/apache/james/mime4j/stream/FallbackBodyDescriptorBuilderTest.java
james/mime4j/branches/apache-mime4j-0.7/dom/src/main/java/org/apache/james/mime4j/message/DefaultBodyDescriptorBuilder.java
james/mime4j/branches/apache-mime4j-0.7/dom/src/test/java/org/apache/james/mime4j/message/MaximalBodyDescriptorTest.java
Modified:
james/mime4j/branches/apache-mime4j-0.7/core/src/main/java/org/apache/james/mime4j/stream/FallbackBodyDescriptorBuilder.java
URL:
http://svn.apache.org/viewvc/james/mime4j/branches/apache-mime4j-0.7/core/src/main/java/org/apache/james/mime4j/stream/FallbackBodyDescriptorBuilder.java?rev=1556611&r1=1556610&r2=1556611&view=diff
==============================================================================
---
james/mime4j/branches/apache-mime4j-0.7/core/src/main/java/org/apache/james/mime4j/stream/FallbackBodyDescriptorBuilder.java
(original)
+++
james/mime4j/branches/apache-mime4j-0.7/core/src/main/java/org/apache/james/mime4j/stream/FallbackBodyDescriptorBuilder.java
Wed Jan 8 19:20:25 2014
@@ -186,9 +186,8 @@ class FallbackBodyDescriptorBuilder impl
}
String b = params.get("boundary");
- if (main != null
- && ((main.startsWith("multipart/") && b != null)
- || !main.startsWith("multipart/"))) {
+ boolean multipart = main != null && main.startsWith("multipart/");
+ if (multipart && b != null || !multipart) {
mimeType = main;
mediaType = type;
subType = subtype;
Modified:
james/mime4j/branches/apache-mime4j-0.7/core/src/main/java/org/apache/james/mime4j/stream/MimeEntity.java
URL:
http://svn.apache.org/viewvc/james/mime4j/branches/apache-mime4j-0.7/core/src/main/java/org/apache/james/mime4j/stream/MimeEntity.java?rev=1556611&r1=1556610&r2=1556611&view=diff
==============================================================================
---
james/mime4j/branches/apache-mime4j-0.7/core/src/main/java/org/apache/james/mime4j/stream/MimeEntity.java
(original)
+++
james/mime4j/branches/apache-mime4j-0.7/core/src/main/java/org/apache/james/mime4j/stream/MimeEntity.java
Wed Jan 8 19:20:25 2014
@@ -362,6 +362,9 @@ class MimeEntity implements EntityStateM
private void createMimePartStream() throws MimeException, IOException {
String boundary = body.getBoundary();
+ if (boundary == null) {
+ throw new MimeException("Multipart body does not have a valid
boundary");
+ }
try {
currentMimePartStream = new MimeBoundaryInputStream(inbuffer,
boundary,
config.isStrictParsing());
Modified:
james/mime4j/branches/apache-mime4j-0.7/core/src/test/java/org/apache/james/mime4j/stream/FallbackBodyDescriptorBuilderTest.java
URL:
http://svn.apache.org/viewvc/james/mime4j/branches/apache-mime4j-0.7/core/src/test/java/org/apache/james/mime4j/stream/FallbackBodyDescriptorBuilderTest.java?rev=1556611&r1=1556610&r2=1556611&view=diff
==============================================================================
---
james/mime4j/branches/apache-mime4j-0.7/core/src/test/java/org/apache/james/mime4j/stream/FallbackBodyDescriptorBuilderTest.java
(original)
+++
james/mime4j/branches/apache-mime4j-0.7/core/src/test/java/org/apache/james/mime4j/stream/FallbackBodyDescriptorBuilderTest.java
Wed Jan 8 19:20:25 2014
@@ -134,6 +134,13 @@ public class FallbackBodyDescriptorBuild
}
+ public void testMultipartNoBoundary() throws Exception {
+ BodyDescriptorBuilder builder = new FallbackBodyDescriptorBuilder();
+ builder.addField(new RawField("Content-Type", "multipart/yada; "));
+ BodyDescriptor bd = builder.build();
+ assertEquals("text/plain", bd.getMimeType());
+ }
+
public void testGetContentLength() throws Exception {
BodyDescriptorBuilder builder = new FallbackBodyDescriptorBuilder();
BodyDescriptor bd = builder.build();
Modified:
james/mime4j/branches/apache-mime4j-0.7/dom/src/main/java/org/apache/james/mime4j/message/DefaultBodyDescriptorBuilder.java
URL:
http://svn.apache.org/viewvc/james/mime4j/branches/apache-mime4j-0.7/dom/src/main/java/org/apache/james/mime4j/message/DefaultBodyDescriptorBuilder.java?rev=1556611&r1=1556610&r2=1556611&view=diff
==============================================================================
---
james/mime4j/branches/apache-mime4j-0.7/dom/src/main/java/org/apache/james/mime4j/message/DefaultBodyDescriptorBuilder.java
(original)
+++
james/mime4j/branches/apache-mime4j-0.7/dom/src/main/java/org/apache/james/mime4j/message/DefaultBodyDescriptorBuilder.java
Wed Jan 8 19:20:25 2014
@@ -108,6 +108,13 @@ public class DefaultBodyDescriptorBuilde
actualSubType = contentTypeField.getSubType();
actualCharset = contentTypeField.getCharset();
actualBoundary = contentTypeField.getBoundary();
+
+ boolean multipart = actualMediaType != null &&
actualMediaType.equalsIgnoreCase("multipart");
+ if (multipart && actualBoundary == null) {
+ actualMimeType = null;
+ actualMediaType = null;
+ actualSubType = null;
+ }
}
if (actualMimeType == null) {
if (MimeUtil.isSameMimeType("multipart/digest", parentMimeType)) {
Modified:
james/mime4j/branches/apache-mime4j-0.7/dom/src/test/java/org/apache/james/mime4j/message/MaximalBodyDescriptorTest.java
URL:
http://svn.apache.org/viewvc/james/mime4j/branches/apache-mime4j-0.7/dom/src/test/java/org/apache/james/mime4j/message/MaximalBodyDescriptorTest.java?rev=1556611&r1=1556610&r2=1556611&view=diff
==============================================================================
---
james/mime4j/branches/apache-mime4j-0.7/dom/src/test/java/org/apache/james/mime4j/message/MaximalBodyDescriptorTest.java
(original)
+++
james/mime4j/branches/apache-mime4j-0.7/dom/src/test/java/org/apache/james/mime4j/message/MaximalBodyDescriptorTest.java
Wed Jan 8 19:20:25 2014
@@ -171,6 +171,13 @@ public class MaximalBodyDescriptorTest e
assertEquals(9901, bd.getContentLength());
}
+ public void testMultipartNoBoundary() throws Exception {
+ BodyDescriptorBuilder builder = new DefaultBodyDescriptorBuilder();
+ builder.addField(new RawField("Content-Type", "multipart/yada; "));
+ BodyDescriptor bd = builder.build();
+ assertEquals("text/plain", bd.getMimeType());
+ }
+
public void testDoDefaultToUsAsciiWhenUntyped() throws Exception {
BodyDescriptorBuilder builder = new DefaultBodyDescriptorBuilder();
builder.addField(new RawField("To", "[email protected]"));