Author: felixk
Date: Tue Apr  5 11:15:32 2011
New Revision: 1088974

URL: http://svn.apache.org/viewvc?rev=1088974&view=rev
Log:
'pos' argument isn't passed by reference, but by value - that's wrong (see 
MAILET-37)

Modified:
    james/mailet/api/trunk/src/main/java/org/apache/mailet/MailAddress.java

Modified: 
james/mailet/api/trunk/src/main/java/org/apache/mailet/MailAddress.java
URL: 
http://svn.apache.org/viewvc/james/mailet/api/trunk/src/main/java/org/apache/mailet/MailAddress.java?rev=1088974&r1=1088973&r2=1088974&view=diff
==============================================================================
--- james/mailet/api/trunk/src/main/java/org/apache/mailet/MailAddress.java 
(original)
+++ james/mailet/api/trunk/src/main/java/org/apache/mailet/MailAddress.java Tue 
Apr  5 11:15:32 2011
@@ -81,8 +81,9 @@ public class MailAddress implements java
      * 
      * @param address the address to strip
      * @param pos current position
+     * @return new pos
      */
-    private void stripSourceRoute(String address, int pos) {
+    private int stripSourceRoute(String address, int pos) {
         if (pos < address.length()) {
             if (address.charAt(pos)=='@') { 
                 int i = address.indexOf(':');
@@ -91,6 +92,7 @@ public class MailAddress implements java
                 }
             }
         }
+        return pos;
     }
     
     /**
@@ -116,12 +118,12 @@ public class MailAddress implements java
             //parse local-part
             //<local-part> ::= <dot-string> | <quoted-string>
             if (address.charAt(pos) == '\"') {
-                localPartSB.append(parseQuotedLocalPart(address, pos));
+                pos = parseQuotedLocalPart(localPartSB, address, pos);
                 if (localPartSB.toString().length() == 2) {
                     throw new AddressException("No quoted local-part (user 
account) found at position " + (pos + 2) + " in '" + address + 
"'",address,pos+2);
                 }
             } else {
-                localPartSB.append(parseUnquotedLocalPart(address, pos));
+                pos = parseUnquotedLocalPart(localPartSB, address, pos);
                 if (localPartSB.toString().length() == 0) {
                     throw new AddressException("No local-part (user account) 
found at position " + (pos + 1) + " in '" + address + "'",address,pos+1);
                 }
@@ -138,11 +140,11 @@ public class MailAddress implements java
             //<element> ::= <name> | "#" <number> | "[" <dotnum> "]"
             while (true) {
                 if (address.charAt(pos) == '#') {
-                    domainSB.append(parseNumber(address, pos));
+                    pos = parseNumber(domainSB, address, pos);
                 } else if (address.charAt(pos) == '[') {
-                    domainSB.append(parseDomainLiteral(address, pos));
+                    pos = parseDomainLiteral(domainSB, address, pos);
                 } else {
-                    domainSB.append(parseDomain(address, pos));
+                    pos = parseDomain(domainSB, address, pos);
                 }
                 if (pos >= address.length()) {
                     break;
@@ -312,7 +314,7 @@ public class MailAddress implements java
         return toString().toLowerCase(Locale.US).hashCode();
     }
 
-    private String parseQuotedLocalPart(String address, int pos) throws 
AddressException {
+    private int parseQuotedLocalPart(StringBuffer lpSB, String address, int 
pos) throws AddressException {
         StringBuffer resultSB = new StringBuffer();
         resultSB.append('\"');
         pos++;
@@ -346,10 +348,11 @@ public class MailAddress implements java
                 pos++;
             }
         }
-        return resultSB.toString();
+        lpSB.append(resultSB);
+        return pos;
     }
 
-    private String parseUnquotedLocalPart(String address, int pos) throws 
AddressException {
+    private int parseUnquotedLocalPart(StringBuffer lpSB, String address, int 
pos) throws AddressException {
         StringBuffer resultSB = new StringBuffer();
         //<dot-string> ::= <string> | <string> "." <dot-string>
         boolean lastCharDot = false;
@@ -399,10 +402,11 @@ public class MailAddress implements java
         if (lastCharDot) {
             throw new AddressException("local-part (user account) ended with a 
\".\", which is invalid in address '" + address + "'",address,pos);
         }
-        return resultSB.toString();
+        lpSB.append(resultSB);
+        return pos;
     }
 
-    private String parseNumber(String address, int pos) throws 
AddressException {
+    private int parseNumber(StringBuffer dSB, String address, int pos) throws 
AddressException {
         //<number> ::= <d> | <d> <number>
 
         StringBuffer resultSB = new StringBuffer();
@@ -422,10 +426,11 @@ public class MailAddress implements java
             resultSB.append(d);
             pos++;
         }
-        return resultSB.toString();
+        dSB.append(resultSB);
+        return pos;
     }
 
-    private String parseDomainLiteral(String address, int pos) throws 
AddressException {
+    private int parseDomainLiteral(StringBuffer dSB, String address, int pos) 
throws AddressException {
         //throw away all irrelevant '\' they're not necessary for escaping of 
'.' or digits, and are illegal as part of the domain-literal
         while(address.indexOf("\\")>-1){
              address= address.substring(0,address.indexOf("\\")) + 
address.substring(address.indexOf("\\")+1);
@@ -484,10 +489,11 @@ public class MailAddress implements java
         }
         resultSB.append(']');
         pos++;
-        return resultSB.toString();
+        dSB.append(resultSB);
+        return pos;
     }
 
-    private String parseDomain(String address, int pos) throws 
AddressException {
+    private int parseDomain(StringBuffer dSB, String address, int pos) throws 
AddressException {
         StringBuffer resultSB = new StringBuffer();
         //<name> ::= <a> <ldh-str> <let-dig>
         //<ldh-str> ::= <let-dig-hyp> | <let-dig-hyp> <ldh-str>
@@ -526,6 +532,7 @@ public class MailAddress implements java
         if (result.startsWith("-") || result.endsWith("-")) {
             throw new AddressException("Domain name cannot begin or end with a 
hyphen \"-\" at position " + (pos + 1) + " in '" + address + "'",address,pos+1);
         }
-        return result;
+        dSB.append(result);
+        return pos;
     }
 }


Reply via email to