eclipse-ee4j / eclipse-ee4j/metro-mimepull

Empty MIME parts are not parsed correctly

Open
#12 4 comments 0 reactions 1 assignee Claimed by @glassfishrobot View on GitHub
ERR: Assignee Priority: Major Type: Bug
Dominant language
Java
Stars
5
Forks
6
PR merge metrics
No merged PRs in 30d

Description

Raised from [https://github.com/spray/spray/issues/874](https://github.com/spray/spray/issues/874)

[RFC 822](http://tools.ietf.org/html/rfc822#section-4.1) specifies the structure of a "message", which is a MIME part.

It says that the CRLF is optional if the body is empty:

```
message = fields *( CRLF *text ) ; Everything after
; first null line
; is message body
```

Also the current spec ([rfc2046](https://tools.ietf.org/html/rfc2046#section-5.1.1)) for multipart messages has this in its grammar:

```
body-part := MIME-part-headers [CRLF *OCTET]
```

... so the following message is a valid MIME bundle with one empty part:

```
--UmzcCZZCSF5bhX4lRMbMNY8m
Content-Disposition: form-data; name=message
--UmzcCZZCSF5bhX4lRMbMNY8m--
```

.. but org.jvnet.mimepull parses this as a part with no headers and a content of "Content-Disposition: form-data; name=message"

This is demonstrated in the following failing Scala test:

```
import collection.JavaConversions._
import java.io._

class MimeParserSpec
extends Specification {

"org.jvnet.mimepull should understand empty BodyParts" in new Scope {
val body = """mime preamble
mime preamble
--rNmigcMAf6HIo0Q2xJ9-vjkH
Content-Disposition: form-data; name=root-fields
--rNmigcMAf6HIo0Q2xJ9-vjkH--"""

val mm = new org.jvnet.mimepull.MIMEMessage(
new ByteArrayInputStream(body.getBytes), "rNmigcMAf6HIo0Q2xJ9-vjkH")

mm.parseAll()
mm.getAttachments.toList must beLike {
case List(att) =>
CharStreams.toString(new InputStreamReader(att.readOnce)) mustEqual ""
}
}
}
```

.. this fails with 'Content-Disposition: form-data; name=root-fields' is not equal to ''
#### Affected Versions
[1.9.4]

Contributor guide

Open the contributing guide

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.