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