You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@james.apache.org by bt...@apache.org on 2021/04/30 06:49:19 UTC

[james-project] branch master updated: JAMES-3571 MimeMessageWrapper getSize was incorrect for empty messages

This is an automated email from the ASF dual-hosted git repository.

btellier pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/james-project.git


The following commit(s) were added to refs/heads/master by this push:
     new 31e49a0  JAMES-3571 MimeMessageWrapper getSize was incorrect for empty messages
31e49a0 is described below

commit 31e49a0ee6613b428d7798f6f47fc4bfaf9b09b9
Author: Benoit Tellier <bt...@linagora.com>
AuthorDate: Tue Apr 27 09:00:47 2021 +0700

    JAMES-3571 MimeMessageWrapper getSize was incorrect for empty messages
    
     - Added the edge case tests
     - If the header delimiter is missing, then the size would be negative, then the body is as a zero size.
---
 .../james/server/core/MimeMessageWrapper.java      |  2 +-
 .../james/server/core/MimeMessageWrapperTest.java  | 55 +++++++++++++++++++++-
 2 files changed, 54 insertions(+), 3 deletions(-)

diff --git a/server/container/core/src/main/java/org/apache/james/server/core/MimeMessageWrapper.java b/server/container/core/src/main/java/org/apache/james/server/core/MimeMessageWrapper.java
index 4f1af5f..5255387 100644
--- a/server/container/core/src/main/java/org/apache/james/server/core/MimeMessageWrapper.java
+++ b/server/container/core/src/main/java/org/apache/james/server/core/MimeMessageWrapper.java
@@ -359,7 +359,7 @@ public class MimeMessageWrapper extends MimeMessage implements Disposable {
                     loadHeaders();
                 }
                 // 2 == CRLF
-                return (int) (fullSize - initialHeaderSize - HEADER_BODY_SEPARATOR_SIZE);
+                return Math.max(0, (int) (fullSize - initialHeaderSize - HEADER_BODY_SEPARATOR_SIZE));
 
             } catch (IOException e) {
                 throw new MessagingException("Unable to calculate message size");
diff --git a/server/container/core/src/test/java/org/apache/james/server/core/MimeMessageWrapperTest.java b/server/container/core/src/test/java/org/apache/james/server/core/MimeMessageWrapperTest.java
index 22cd393..9686fe2 100644
--- a/server/container/core/src/test/java/org/apache/james/server/core/MimeMessageWrapperTest.java
+++ b/server/container/core/src/test/java/org/apache/james/server/core/MimeMessageWrapperTest.java
@@ -85,24 +85,27 @@ public class MimeMessageWrapperTest extends MimeMessageFromStreamTest {
     }
     
     TestableMimeMessageWrapper mw = null;
+    TestableMimeMessageWrapper onlyHeader = null;
     final String content = "Subject: foo\r\nContent-Transfer-Encoding2: plain";
     final String sep = "\r\n\r\n";
     final String body = "bar\r\n";
 
     @Override
-    protected MimeMessage getMessageFromSources(String sources) throws Exception {
+    protected TestableMimeMessageWrapper getMessageFromSources(String sources) throws Exception {
         MimeMessageInputStreamSource mmis = new MimeMessageInputStreamSource("test", new SharedByteArrayInputStream(sources.getBytes()));
         return new TestableMimeMessageWrapper(mmis);
     }
 
     @BeforeEach
     public void setUp() throws Exception {
-        mw = (TestableMimeMessageWrapper) getMessageFromSources(content + sep + body);
+        mw = getMessageFromSources(content + sep + body);
+        onlyHeader = getMessageFromSources(content);
     }
 
     @AfterEach
     public void tearDown() throws Exception {
         LifecycleUtil.dispose(mw);
+        LifecycleUtil.dispose(onlyHeader);
     }
 
     @Test
@@ -249,6 +252,54 @@ public class MimeMessageWrapperTest extends MimeMessageFromStreamTest {
     }
 
     @Test
+    public void getSizeShouldReturnZeroWhenNoHeaderAndAddHeader() throws MessagingException {
+        onlyHeader.addHeader("a", "b");
+        assertThat(onlyHeader.getSize()).isEqualTo(0);
+    }
+
+    @Test
+    public void getSizeShouldReturnZeroWhenNoHeader() throws MessagingException {
+        assertThat(onlyHeader.getSize()).isEqualTo(0);
+    }
+
+    @Test
+    public void getSizeShouldReturnZeroWhenSingleChar() throws Exception {
+        assertThat(getMessageFromSources("a").getSize()).isEqualTo(0);
+    }
+
+    @Test
+    public void getSizeShouldReturnZeroWhenSingleCharBody() throws Exception {
+        assertThat(getMessageFromSources("a: b\r\n\r\na").getSize()).isEqualTo(1);
+    }
+
+    @Test
+    public void getSizeShouldReturnZeroWhenEmptyString() throws Exception {
+        assertThat(getMessageFromSources("").getSize()).isEqualTo(0);
+    }
+
+    @Test
+    public void getMessageSizeShouldReturnExpectedValueWhenNoHeader() throws MessagingException {
+        assertThat(onlyHeader.getMessageSize()).isEqualTo(content.length());
+    }
+
+    @Test
+    public void getMessageSizeShouldReturnExpectedValueWhenNoHeaderAndAddHeader() throws Exception {
+        onlyHeader.addHeader("new", "value");
+        assertThat(onlyHeader.getMessageSize()).isEqualTo(
+            IOUtils.consume(onlyHeader.getMessageInputStream()));
+    }
+
+    @Test
+    public void getMessageSizeShouldReturnExpectedValueWhenSingleChar() throws Exception {
+        assertThat(getMessageFromSources("a").getMessageSize()).isEqualTo(1);
+    }
+
+    @Test
+    public void getMessageSizeShouldReturnExpectedValueWhenEmptyString() throws Exception {
+        assertThat(getMessageFromSources("").getMessageSize()).isEqualTo(0);
+    }
+
+    @Test
     public void testSizeModifiedHeaders() throws MessagingException {
         mw.addHeader("whatever", "test");
         assertThat(mw.getSize()).isEqualTo(body.length());

---------------------------------------------------------------------
To unsubscribe, e-mail: notifications-unsubscribe@james.apache.org
For additional commands, e-mail: notifications-help@james.apache.org