This is an automated email from the ASF dual-hosted git repository. chibenwa pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/james-mime4j.git
commit 76e0063c3fbf3db34252c3fd38d19c2b87a7c3d1 Author: Benoit TELLIER <[email protected]> AuthorDate: Wed Nov 4 15:02:32 2026 +0100 [TEST] Strict parseHeader accepts a valid multipart (#103) stop() before the body of a multipart made strict parsing throw "Unexpected end of stream". Fixed by the previous commit, which treats the truncation stop() asks for as the end of the multipart rather than a premature end. This adds the regression test of the issue: both inputs of the ticket, DEFAULT and PERMISSIVE, read whole and in chunks. Fixes #103 --- .../message/DefaultMessageBuilderParseHeaderTest.java | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/dom/src/test/java/org/apache/james/mime4j/message/DefaultMessageBuilderParseHeaderTest.java b/dom/src/test/java/org/apache/james/mime4j/message/DefaultMessageBuilderParseHeaderTest.java index f6b2bd9a..a6098aed 100644 --- a/dom/src/test/java/org/apache/james/mime4j/message/DefaultMessageBuilderParseHeaderTest.java +++ b/dom/src/test/java/org/apache/james/mime4j/message/DefaultMessageBuilderParseHeaderTest.java @@ -109,4 +109,22 @@ public class DefaultMessageBuilderParseHeaderTest { assertThat(header.getFields()).hasSize(2); } + + @Test + public void strictParseHeaderShouldAcceptAValidMultipart() throws Exception { + String[] messages = { + "From: [email protected]\nContent-Type: multipart/mixed; boundary=b1\n\n" + + "--b1\nX-Part: one\n\nfirst body\n--b1\nX-Part: two\n\nsecond body\n--b1--\n", + "Subject: @exams\nContent-Type: multipart/alternative;\n boundary=\"=_alt\"\n\n--=_alt--\n"}; + for (MimeConfig base : new MimeConfig[] {MimeConfig.DEFAULT, MimeConfig.PERMISSIVE}) { + DefaultMessageBuilder builder = new DefaultMessageBuilder(); + builder.setMimeEntityConfig(MimeConfig.copy(base).setStrictParsing(true).build()); + for (String msg : messages) { + byte[] bytes = msg.getBytes(StandardCharsets.US_ASCII); + + assertThat(builder.parseHeader(new ByteArrayInputStream(bytes)).getFields()).hasSize(2); + assertThat(builder.parseHeader(chunked(bytes)).getFields()).hasSize(2); + } + } + } } --------------------------------------------------------------------- To unsubscribe, e-mail: [email protected] For additional commands, e-mail: [email protected]
