Project: javamail
Repository: mercurial
Revision: 838
Author: shannon
Date: 2016-07-15 22:09:47 UTC
Link:
Log Message:
------------
Handle more cases of newlines in addresses - bug 7529
Revisions:
----------
838
Modified Paths:
---------------
mail/src/main/java/javax/mail/internet/MimeMessage.java
mail/src/main/java/javax/mail/internet/NewsAddress.java
mail/src/test/java/javax/mail/internet/MimeMessageTest.java
Diffs:
------
diff -r 36a23abb958b -r 65d3c6a9047a mail/src/main/java/javax/mail/internet/MimeMessage.java
--- a/mail/src/main/java/javax/mail/internet/MimeMessage.java Tue Jul 12 16:38:43 2016 -0700
+++ b/mail/src/main/java/javax/mail/internet/MimeMessage.java Fri Jul 15 15:09:47 2016 -0700
@@ -1,7 +1,7 @@
/*
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
*
- * Copyright (c) 1997-2015 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997-2016 Oracle and/or its affiliates. All rights reserved.
*
* The contents of this file are subject to the terms of either the GNU
* General Public License Version 2 only ("GPL") or the Common Development
@@ -393,7 +393,7 @@
if (address == null)
removeHeader("From");
else
- setHeader("From", address.toString());
+ setHeader("From", MimeUtility.fold(6, address.toString()));
}
/**
@@ -497,7 +497,7 @@
if (address == null)
removeHeader("Sender");
else
- setHeader("Sender", address.toString());
+ setHeader("Sender", MimeUtility.fold(8, address.toString()));
}
/**
diff -r 36a23abb958b -r 65d3c6a9047a mail/src/main/java/javax/mail/internet/NewsAddress.java
--- a/mail/src/main/java/javax/mail/internet/NewsAddress.java Tue Jul 12 16:38:43 2016 -0700
+++ b/mail/src/main/java/javax/mail/internet/NewsAddress.java Fri Jul 15 15:09:47 2016 -0700
@@ -1,7 +1,7 @@
/*
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
*
- * Copyright (c) 1997-2014 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997-2016 Oracle and/or its affiliates. All rights reserved.
*
* The contents of this file are subject to the terms of either the GNU
* General Public License Version 2 only ("GPL") or the Common Development
@@ -81,7 +81,9 @@
* @param host the host
*/
public NewsAddress(String newsgroup, String host) {
- this.newsgroup = newsgroup;
+ // XXX - this method should throw an exception so we can report
+ // illegal addresses, but for now just remove whitespace
+ this.newsgroup = newsgroup.replaceAll("\\s+", "");
this.host = host;
}
@@ -182,14 +184,24 @@
StringBuffer s =
new StringBuffer(((NewsAddress)addresses[0]).toString());
- for (int i = 1; i < addresses.length; i++)
- s.append(",").append(((NewsAddress)addresses[i]).toString());
+ int used = s.length();
+ for (int i = 1; i < addresses.length; i++) {
+ s.append(",");
+ used++;
+ String ng = ((NewsAddress)addresses[i]).toString();
+ if (used + ng.length() > 76) {
+ s.append("\r\n\t");
+ used = 8;
+ }
+ s.append(ng);
+ used += ng.length();
+ }
return s.toString();
}
/**
- * Parse the given comma separated sequence of newsgroup into
+ * Parse the given comma separated sequence of newsgroups into
* NewsAddress objects.
*
* @param newsgroups comma separated newsgroup string
diff -r 36a23abb958b -r 65d3c6a9047a mail/src/test/java/javax/mail/internet/MimeMessageTest.java
--- a/mail/src/test/java/javax/mail/internet/MimeMessageTest.java Tue Jul 12 16:38:43 2016 -0700
+++ b/mail/src/test/java/javax/mail/internet/MimeMessageTest.java Fri Jul 15 15:09:47 2016 -0700
@@ -50,6 +50,7 @@
import javax.mail.*;
import static javax.mail.Message.RecipientType.*;
+import static javax.mail.internet.MimeMessage.RecipientType.*;
import org.junit.*;
import static org.junit.Assert.assertArrayEquals;
@@ -96,6 +97,72 @@
}
/**
+ * Test that setFrom with an address containing a newline is folded
+ * properly.
+ * (Bug 7529)
+ */
+ @Test
+ public void testSetFromFold() throws Exception {
+ InternetAddress addr = new InternetAddress("joe_at_bad.com", "Joe\r\nBad");
+ MimeMessage m = new MimeMessage(s);
+ m.setFrom(addr);
+ assertEquals("Joe\r\n Bad <joe_at_bad.com>", m.getHeader("From", null));
+ }
+
+ /**
+ * Test that setSender with an address containing a newline is folded
+ * properly.
+ * (Bug 7529)
+ */
+ @Test
+ public void testSetSenderFold() throws Exception {
+ InternetAddress addr = new InternetAddress("joe_at_bad.com", "Joe\r\nBad");
+ MimeMessage m = new MimeMessage(s);
+ m.setSender(addr);
+ assertEquals("Joe\r\n Bad <joe_at_bad.com>", m.getHeader("Sender", null));
+ }
+
+ /**
+ * Test that setRecipient with a newsgroup address containing a newline is
+ * handled properly.
+ * (Bug 7529)
+ */
+ @Test
+ public void testSetNewsgroupWhitespace() throws Exception {
+ NewsAddress addr = new NewsAddress("alt.\r\nbad");
+ MimeMessage m = new MimeMessage(s);
+ m.setRecipient(NEWSGROUPS, addr);
+ assertEquals("alt.bad", m.getHeader("Newsgroups", null));
+ }
+
+ /**
+ * Test that setRecipients with many newsgroup addresses is folded properly.
+ * (Bug 7529)
+ */
+ @Test
+ public void testSetNewsgroupFold() throws Exception {
+ NewsAddress[] longng = NewsAddress.parse(
+ "alt.loooooooooooooooooooooooooooooooooooooooooooooooooong," +
+ "alt.verylongggggggggggggggggggggggggggggggggggggggggggggg");
+ MimeMessage m = new MimeMessage(s);
+ m.setRecipients(NEWSGROUPS, longng);
+ assertTrue(m.getHeader("Newsgroups", null).indexOf("\r\n\t") > 0);
+ }
+
+ /**
+ * Test that newsgroups can be set and read back (even if folded).
+ */
+ @Test
+ public void testSetGetNewsgroups() throws Exception {
+ NewsAddress[] longng = NewsAddress.parse(
+ "alt.loooooooooooooooooooooooooooooooooooooooooooooooooong," +
+ "alt.verylongggggggggggggggggggggggggggggggggggggggggggggg");
+ MimeMessage m = new MimeMessage(s);
+ m.setRecipients(NEWSGROUPS, longng);
+ assertArrayEquals(longng, m.getRecipients(NEWSGROUPS));
+ }
+
+ /**
* Test that copying a DataHandler from one message to another
* has the desired effect.
*/