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;
}
}