james-mime4j-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Stefano Bagnara (JIRA)" <mime4j-...@james.apache.org>
Subject [jira] Commented: (MIME4J-176) Wrong CRLF usage in multipart.writeTo
Date Sat, 27 Mar 2010 14:18:27 GMT

    [ https://issues.apache.org/jira/browse/MIME4J-176?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12850518#action_12850518

Stefano Bagnara commented on MIME4J-176:

The problem is in preamble handling.

Currenlty the parser calls the T_PREAMBLE event for every message, even if they don't have
a preamble.
So, there's currently no way to distinguish a message with no preamble from a message with
an empty preamble. Given this "impossibility" it is by result impossible to correctly roundtrip
both of them.

So the fix involve a few behavioural changes for the parser and for the dom:
1) The parser should not invoke T_PREAMBLE for messages having no preamble, instead it should
start the following event (T_START_BODYPART)
2) The Multipart object should support "nulls" for preamble and epilogue, so to discern between
no preamble and empty preamble.

This alters (*fixes*) the contract between mime4j parser/dom and the user, but the old behaviour
is clearly wrong, so I don't see an alternative.

> Wrong CRLF usage in multipart.writeTo
> -------------------------------------
>                 Key: MIME4J-176
>                 URL: https://issues.apache.org/jira/browse/MIME4J-176
>             Project: JAMES Mime4j
>          Issue Type: Bug
>          Components: dom
>    Affects Versions: 0.6
>            Reporter: Stefano Bagnara
>            Assignee: Stefano Bagnara
>             Fix For: 0.7
> MessageWriter currently has this code:
>         writeBytes(preamble, out);
>         out.write(CRLF);
> and 
>         out.write(CRLF);
>         writeBytes(epilogue, out);
> This is correct only when epilogue and preamble exists in the original message, otherwise
it introduces a one empty line epilogue/preamble that was not present in the original message.
> RFC clearly states that the CRLF after the preamble can be added only when a preamble
exists (the same for the CRLF before the epilogue) 
>      multipart-body := [preamble CRLF]
>                        dash-boundary transport-padding CRLF
>                        body-part *encapsulation
>                        close-delimiter transport-padding
>                        [CRLF epilogue]
> So, roundtripping doesn't currently work for messages with no preamble or no epilogue,
introducing a new empty line in the output stream.
> As an example this make it impossible to DKIM sign and validate messages with empty epilogue/prologue
and it breaks DKIM signatures for such messages (this is true with the "simple" canonicalization

This message is automatically generated by JIRA.
You can reply to this email to add a comment to the issue online.

View raw message