[
https://issues.apache.org/jira/browse/GERONIMO-6909?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Richard Zowalla reopened GERONIMO-6909:
---------------------------------------
> InternetHeaders.addHeader rejects legally repeatable headers - narrow the
> single-value policy to the RFC 5322/2045 singleton fields
> -----------------------------------------------------------------------------------------------------------------------------------
>
> Key: GERONIMO-6909
> URL: https://issues.apache.org/jira/browse/GERONIMO-6909
> Project: Geronimo
> Issue Type: Bug
> Security Level: public(Regular issues)
> Components: mail
> Reporter: Richard Zowalla
> Priority: Major
> Fix For: Mail_2.1_1.1.1
>
>
> Split out from GERONIMO\-6908, which fixes the inbound half of the same check.
> GERONIMO\-6870 introduced a single\-value policy in {{InternetHeaders}} so
> that we do not emit messages with duplicated headers, because some servers \-
> Gmail among them \- reject those. The intent is right, but the rule is
> implemented as "every header except {{Received}} and {{Return\-Path}} may
> appear at most once", which is far broader than what the RFCs actually
> constrain.
> As a result {{addHeader}} throws {{IllegalStateException}} for cases that are
> perfectly legal:
> {code:java}
> InternetHeaders headers = new InternetHeaders\(\);
> headers.addHeader\("X\-Trace\-Id", "abc"\);
> headers.addHeader\("X\-Trace\-Id", "def"\); // IllegalStateException
> {code}
> The same applies to {{Comments}} and {{Keywords}} \(RFC 5322 section 3.6.5,
> "unlimited"\), the {{Resent\-_}} set \(section 3.6.6, one block per
> resending\), {{List\-_}} \(RFC 2369\), and every application\-defined {{X\-}}
> header. Callers that build a message programmatically have no way to express
> those, and {{MimeMessage.addHeader}} / {{MimeBodyPart.addHeader}} inherit the
> restriction.
> h2. Proposed fix
> Apply the policy only to headers the specifications really do restrict to one
> occurrence:
> * RFC 5322 section 3.6: {{Date}}, {{From}}, {{Sender}}, {{Reply\-To}},
> {{To}}, {{Cc}}, {{Bcc}}, {{Message\-ID}}, {{In\-Reply\-To}}, {{References}},
> {{Subject}}
> * RFC 2045: {{MIME\-Version}}, {{Content\-Type}},
> {{Content\-Transfer\-Encoding}}, {{Content\-ID}}, {{Content\-Description}},
> and RFC 2183 {{Content\-Disposition}}
> Everything else is appended, which is what
> {{InternetHeaders.getHeader\(String\)}} returning a {{String\[\]}} implies
> and what Angus does. The matching must be case\-insensitive; today the
> {{Received}} / {{Return\-Path}} exemption uses {{equals}} while the duplicate
> scan uses {{equalsIgnoreCase}}, so {{received:}} in lower case is treated
> inconsistently.
> {{Received}} and {{Return\-Path}} stay exempt and are simply covered by not
> being in the singleton set.
--
This message was sent by Atlassian Jira
(v10.3.26#10030026)