You are viewing a plain text version of this content. The canonical link for it is here.
Posted to server-dev@james.apache.org by no...@apache.org on 2009/05/30 19:03:55 UTC
svn commit: r780297 - in /james/jspf/trunk/resolver/src:
main/java/org/apache/james/jspf/core/MacroExpand.java
test/java/org/apache/james/jspf/core/MacroExpandTest.java
Author: norman
Date: Sat May 30 17:03:55 2009
New Revision: 780297
URL: http://svn.apache.org/viewvc?rev=780297&view=rev
Log:
Correctly handle dollar sign in local-part of emailaddress. See JSPF-71. Thx to Frank Stolle for reporting
Modified:
james/jspf/trunk/resolver/src/main/java/org/apache/james/jspf/core/MacroExpand.java
james/jspf/trunk/resolver/src/test/java/org/apache/james/jspf/core/MacroExpandTest.java
Modified: james/jspf/trunk/resolver/src/main/java/org/apache/james/jspf/core/MacroExpand.java
URL: http://svn.apache.org/viewvc/james/jspf/trunk/resolver/src/main/java/org/apache/james/jspf/core/MacroExpand.java?rev=780297&r1=780296&r2=780297&view=diff
==============================================================================
--- james/jspf/trunk/resolver/src/main/java/org/apache/james/jspf/core/MacroExpand.java (original)
+++ james/jspf/trunk/resolver/src/main/java/org/apache/james/jspf/core/MacroExpand.java Sat May 30 17:03:55 2009
@@ -278,7 +278,7 @@
macroCell = input.substring(inputMatcher.start() + 2, inputMatcher
.end() - 1);
inputMatcher
- .appendReplacement(decodedValue, replaceCell(macroCell, macroData, isExplanation));
+ .appendReplacement(decodedValue, escapeForMatcher(replaceCell(macroCell, macroData, isExplanation)));
} else if (match2.length() == 2 && match2.startsWith("%")) {
// handle the % escaping
/*
@@ -293,7 +293,7 @@
} else if ("%-".equals(match2)) {
inputMatcher.appendReplacement(decodedValue, "%20");
} else {
- inputMatcher.appendReplacement(decodedValue, match2.substring(1));
+ inputMatcher.appendReplacement(decodedValue, escapeForMatcher(match2.substring(1)));
}
}
}
@@ -562,5 +562,27 @@
return data.replaceAll("\\+", "%20");
}
+
+ /**
+ * Because Dollar signs may be treated as references to captured subsequences in method Matcher.appendReplacement
+ * its necessary to escape Dollar signs because its allowed in the local-part of an emailaddress.
+ *
+ * See JSPF-71 for the bugreport
+ *
+ * @param raw
+ * @return escaped string
+ */
+ private String escapeForMatcher(String raw) {
+ StringBuffer sb= new StringBuffer();
+
+ for (int i = 0; i < raw.length(); i++) {
+ char c = raw.charAt(i);
+ if (c == '$') {
+ sb.append('\\');
+ }
+ sb.append(c);
+ }
+ return sb.toString();
+ }
}
\ No newline at end of file
Modified: james/jspf/trunk/resolver/src/test/java/org/apache/james/jspf/core/MacroExpandTest.java
URL: http://svn.apache.org/viewvc/james/jspf/trunk/resolver/src/test/java/org/apache/james/jspf/core/MacroExpandTest.java?rev=780297&r1=780296&r2=780297&view=diff
==============================================================================
--- james/jspf/trunk/resolver/src/test/java/org/apache/james/jspf/core/MacroExpandTest.java (original)
+++ james/jspf/trunk/resolver/src/test/java/org/apache/james/jspf/core/MacroExpandTest.java Sat May 30 17:03:55 2009
@@ -184,7 +184,18 @@
public void testExample6_ipv6() throws PermErrorException {
assertEquals(
"1.0.B.C.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.8.B.D.0.1.0.0.2.ip6._spf.example.com",
- defIp6me.expand("%{ir}.%{v}._spf.%{d2}", new rfcIP6MacroData(), MacroExpand.DOMAIN));
+ defIp6me.expand("%{ir}.%{v}._spf.%{d2}", new rfcIP6MacroData(), MacroExpand.EXPLANATION));
+ }
+
+ public void testLocalPartWithSpecialChars() throws PermErrorException {
+ defIp4me.expand("+exists:CL.%{i}.FR.%{s}.spf.test.com", new rfcIP4MacroData() {
+ public String getMailFrom() {
+ return "test{$LNAME}@email.example.com";
+ }
+ public String getCurrentSenderPart() {
+ return "test{$LNAME}";
+ }
+ }, MacroExpand.DOMAIN);
}
}
---------------------------------------------------------------------
To unsubscribe, e-mail: server-dev-unsubscribe@james.apache.org
For additional commands, e-mail: server-dev-help@james.apache.org