You are viewing a plain text version of this content. The canonical link for it is here.
Posted to mime4j-dev@james.apache.org by ol...@apache.org on 2011/12/12 20:49:14 UTC

svn commit: r1213393 - in /james/mime4j/trunk: ./ dom/src/main/java/org/apache/james/mime4j/field/address/ dom/src/test/java/org/apache/james/mime4j/field/address/

Author: olegk
Date: Mon Dec 12 19:49:14 2011
New Revision: 1213393

URL: http://svn.apache.org/viewvc?rev=1213393&view=rev
Log:
MIME4J-210: lenient address parser does not decode encoded display names

Added:
    james/mime4j/trunk/.gitignore
Modified:
    james/mime4j/trunk/dom/src/main/java/org/apache/james/mime4j/field/address/LenientAddressBuilder.java
    james/mime4j/trunk/dom/src/test/java/org/apache/james/mime4j/field/address/DefaultAddressBuilderTest.java
    james/mime4j/trunk/dom/src/test/java/org/apache/james/mime4j/field/address/LenientAddressBuilderTest.java

Added: james/mime4j/trunk/.gitignore
URL: http://svn.apache.org/viewvc/james/mime4j/trunk/.gitignore?rev=1213393&view=auto
==============================================================================
--- james/mime4j/trunk/.gitignore (added)
+++ james/mime4j/trunk/.gitignore Mon Dec 12 19:49:14 2011
@@ -0,0 +1,5 @@
+.classpath
+.project
+.settings
+target
+maven-eclipse.xml

Modified: james/mime4j/trunk/dom/src/main/java/org/apache/james/mime4j/field/address/LenientAddressBuilder.java
URL: http://svn.apache.org/viewvc/james/mime4j/trunk/dom/src/main/java/org/apache/james/mime4j/field/address/LenientAddressBuilder.java?rev=1213393&r1=1213392&r2=1213393&view=diff
==============================================================================
--- james/mime4j/trunk/dom/src/main/java/org/apache/james/mime4j/field/address/LenientAddressBuilder.java (original)
+++ james/mime4j/trunk/dom/src/main/java/org/apache/james/mime4j/field/address/LenientAddressBuilder.java Mon Dec 12 19:49:14 2011
@@ -24,6 +24,8 @@ import java.util.BitSet;
 import java.util.Collections;
 import java.util.List;
 
+import org.apache.james.mime4j.codec.DecodeMonitor;
+import org.apache.james.mime4j.codec.DecoderUtil;
 import org.apache.james.mime4j.dom.address.Address;
 import org.apache.james.mime4j.dom.address.AddressList;
 import org.apache.james.mime4j.dom.address.DomainList;
@@ -54,12 +56,14 @@ public class LenientAddressBuilder {
     private static final BitSet COLON_ONLY             = RawFieldParser.INIT_BITSET(COLON);
     private static final BitSet SEMICOLON_ONLY         = RawFieldParser.INIT_BITSET(SEMICOLON);
 
-    public static final LenientAddressBuilder DEFAULT = new LenientAddressBuilder();
+    public static final LenientAddressBuilder DEFAULT = new LenientAddressBuilder(DecodeMonitor.SILENT);
 
+    private final DecodeMonitor monitor;
     private final RawFieldParser parser;
 
-    protected LenientAddressBuilder() {
+    protected LenientAddressBuilder(final DecodeMonitor monitor) {
         super();
+        this.monitor = monitor;
         this.parser = new RawFieldParser();
     }
 
@@ -123,40 +127,47 @@ public class LenientAddressBuilder {
         return domains != null ? new DomainList(domains, true) : null;
     }
 
+    private Mailbox createMailbox(
+            final String name, final DomainList route, final String localPart, final String domain) {
+        return new Mailbox(
+                name != null ? DecoderUtil.decodeEncodedWords(name, this.monitor) : null, 
+                        route, localPart, domain);
+    }
+    
     Mailbox parseMailboxAddress(
             final String openingText, final ByteSequence buf, final ParserCursor cursor) {
         if (cursor.atEnd()) {
-            return new Mailbox(null, null, openingText, null);
+            return createMailbox(null, null, openingText, null);
         }
         int pos = cursor.getPos();
         char current = (char) (buf.byteAt(pos) & 0xff);
         if (current == OPENING_BRACKET) {
             cursor.updatePos(pos + 1);
         } else {
-            return new Mailbox(null, null, openingText, null);
+            return createMailbox(null, null, openingText, null);
         }
         DomainList domainList = parseRoute(buf, cursor, CLOSING_BRACKET_ONLY);
         String localPart = this.parser.parseValue(buf, cursor, AT_AND_CLOSING_BRACKET);
         if (cursor.atEnd()) {
-            return new Mailbox(openingText, domainList, localPart, null);
+            return createMailbox(openingText, domainList, localPart, null);
         }
         pos = cursor.getPos();
         current = (char) (buf.byteAt(pos) & 0xff);
         if (current == AT) {
             cursor.updatePos(pos + 1);
         } else {
-            return new Mailbox(openingText, domainList, localPart, null);
+            return createMailbox(openingText, domainList, localPart, null);
         }
         String domain = parseDomain(buf, cursor, CLOSING_BRACKET_ONLY);
         if (cursor.atEnd()) {
-            return new Mailbox(openingText, domainList, localPart, domain);
+            return createMailbox(openingText, domainList, localPart, domain);
         }
         pos = cursor.getPos();
         current = (char) (buf.byteAt(pos) & 0xff);
         if (current == CLOSING_BRACKET) {
             cursor.updatePos(pos + 1);
         } else {
-            return new Mailbox(openingText, domainList, localPart, domain);
+            return createMailbox(openingText, domainList, localPart, domain);
         }
         while (!cursor.atEnd()) {
             pos = cursor.getPos();
@@ -169,7 +180,7 @@ public class LenientAddressBuilder {
                 break;
             }
         }
-        return new Mailbox(openingText, domainList, localPart, domain);
+        return createMailbox(openingText, domainList, localPart, domain);
     }
 
     private Mailbox createMailbox(final String localPart) {

Modified: james/mime4j/trunk/dom/src/test/java/org/apache/james/mime4j/field/address/DefaultAddressBuilderTest.java
URL: http://svn.apache.org/viewvc/james/mime4j/trunk/dom/src/test/java/org/apache/james/mime4j/field/address/DefaultAddressBuilderTest.java?rev=1213393&r1=1213392&r2=1213393&view=diff
==============================================================================
--- james/mime4j/trunk/dom/src/test/java/org/apache/james/mime4j/field/address/DefaultAddressBuilderTest.java (original)
+++ james/mime4j/trunk/dom/src/test/java/org/apache/james/mime4j/field/address/DefaultAddressBuilderTest.java Mon Dec 12 19:49:14 2011
@@ -68,6 +68,13 @@ public class DefaultAddressBuilderTest e
 
     }
 
+    public void testParseMailboxEncoded() throws ParseException {
+        Mailbox mailbox1 = parser.parseMailbox("=?ISO-8859-1?B?c3R1ZmY=?= <st...@localhost.localdomain>");
+        assertEquals("stuff", mailbox1.getName());
+        assertEquals("stuff", mailbox1.getLocalPart());
+        assertEquals("localhost.localdomain", mailbox1.getDomain());
+    }
+
     public void testParseMailboxObsoleteSynatax() throws ParseException {
         Mailbox mailbox1 = parser.parseMailbox("< (route)(obsolete) " +
                 "@host1.domain1 , @host2 . domain2:  foo@bar.org>");

Modified: james/mime4j/trunk/dom/src/test/java/org/apache/james/mime4j/field/address/LenientAddressBuilderTest.java
URL: http://svn.apache.org/viewvc/james/mime4j/trunk/dom/src/test/java/org/apache/james/mime4j/field/address/LenientAddressBuilderTest.java?rev=1213393&r1=1213392&r2=1213393&view=diff
==============================================================================
--- james/mime4j/trunk/dom/src/test/java/org/apache/james/mime4j/field/address/LenientAddressBuilderTest.java (original)
+++ james/mime4j/trunk/dom/src/test/java/org/apache/james/mime4j/field/address/LenientAddressBuilderTest.java Mon Dec 12 19:49:14 2011
@@ -180,6 +180,13 @@ public class LenientAddressBuilderTest e
         assertEquals("hans.mueller@acme.org", mailbox5.getAddress());
     }
 
+    public void testParseMailboxEncoded() throws ParseException {
+        Mailbox mailbox1 = parser.parseMailbox("=?ISO-8859-1?B?c3R1ZmY=?= <st...@localhost.localdomain>");
+        assertEquals("stuff", mailbox1.getName());
+        assertEquals("stuff", mailbox1.getLocalPart());
+        assertEquals("localhost.localdomain", mailbox1.getDomain());
+    }
+
     public void testParseMailboxNonASCII() throws Exception {
         Mailbox mailbox1 = parser.parseMailbox(
                 "Hans M\374ller <ha...@acme.org>");