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]

Reply via email to