Skip to content

Commit 3f8a361

Browse files
committed
UTF-8 support for james-server-core
1 parent dec4fc8 commit 3f8a361

File tree

3 files changed

+34
-3
lines changed

3 files changed

+34
-3
lines changed

server/container/core/src/main/java/org/apache/james/server/core/InternetHeadersInputStream.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -69,7 +69,7 @@ private boolean readNextLine() {
6969
if (!headerLines.hasMoreElements()) {
7070
line += LINE_SEPERATOR;
7171
}
72-
currLine = line.getBytes(StandardCharsets.US_ASCII);
72+
currLine = line.getBytes(StandardCharsets.UTF_8);
7373
return true;
7474
} else {
7575
return false;

server/container/core/src/main/java/org/apache/james/server/core/MailHeaders.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -39,8 +39,8 @@
3939
* </pre>
4040
*/
4141
public class MailHeaders extends InternetHeaders implements Serializable, Cloneable {
42-
4342
private static final long serialVersionUID = 238748126601L;
43+
private static final boolean ALLOWUTF_8 = true;
4444
private boolean modified = false;
4545
private long size = -1;
4646

@@ -67,7 +67,7 @@ public MailHeaders() {
6767
*/
6868
public MailHeaders(InputStream in) throws MessagingException {
6969
super();
70-
load(in);
70+
load(in, ALLOWUTF_8);
7171
}
7272

7373
/**

server/container/core/src/test/java/org/apache/james/server/core/MimeMessageWrapperTest.java

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@
2626
import java.io.IOException;
2727
import java.io.InputStream;
2828
import java.io.InputStreamReader;
29+
import java.nio.charset.StandardCharsets;
2930
import java.util.Enumeration;
3031
import java.util.Properties;
3132

@@ -87,6 +88,7 @@ public synchronized void loadMessage() throws MessagingException {
8788
TestableMimeMessageWrapper mw = null;
8889
TestableMimeMessageWrapper onlyHeader = null;
8990
final String content = "Subject: foo\r\nContent-Transfer-Encoding2: plain";
91+
final String contentUtf8 = "Subject: fée\r\nContent-Transfer-Encoding2: plain";
9092
final String sep = "\r\n\r\n";
9193
final String body = "bar\r\n";
9294

@@ -276,6 +278,35 @@ public void testSize() throws MessagingException {
276278
assertThat(mw.getSize()).isEqualTo(body.length());
277279
}
278280

281+
@Test
282+
public void testSizeUtf8() throws Exception {
283+
TestableMimeMessageWrapper message = getMessageFromSources(contentUtf8 + sep + body);
284+
ByteArrayOutputStream baos = new ByteArrayOutputStream();
285+
message.writeTo(baos);
286+
287+
assertThat(message.getMessageSize())
288+
.isEqualTo(baos.size());
289+
}
290+
291+
@Test
292+
public void testWriteToUtf8() throws Exception {
293+
TestableMimeMessageWrapper message = getMessageFromSources(contentUtf8 + sep + body);
294+
ByteArrayOutputStream baos = new ByteArrayOutputStream();
295+
message.writeTo(baos);
296+
297+
assertThat(baos.toString(StandardCharsets.UTF_8)).isEqualTo(contentUtf8 + sep + body);
298+
}
299+
300+
@Test
301+
public void testWriteToUtf8AfterHeaderModification() throws Exception {
302+
TestableMimeMessageWrapper message = getMessageFromSources(contentUtf8 + sep + body);
303+
message.addHeader("Another", "header");
304+
ByteArrayOutputStream baos = new ByteArrayOutputStream();
305+
message.writeTo(baos);
306+
307+
assertThat(baos.toString(StandardCharsets.UTF_8)).contains("Subject: fée\r\n");
308+
}
309+
279310
@Test
280311
public void getSizeShouldReturnZeroWhenNoHeaderAndAddHeader() throws MessagingException {
281312
onlyHeader.addHeader("a", "b");

0 commit comments

Comments
 (0)