You are viewing a plain text version of this content. The canonical link for it is here.
Posted to log4j-dev@logging.apache.org by ca...@apache.org on 2005/02/11 22:17:11 UTC
cvs commit: logging-log4j/tests/src/java/org/apache/log4j/helpers OptionSubstitutionTest.java
carnold 2005/02/11 13:17:11
Modified: src/java/org/apache/log4j/helpers OptionConverter.java
tests/src/java/org/apache/log4j/helpers
OptionSubstitutionTest.java
Log:
bug 22894: Backslashes in file specs, UNC handling
Revision Changes Path
1.53 +21 -2 logging-log4j/src/java/org/apache/log4j/helpers/OptionConverter.java
Index: OptionConverter.java
===================================================================
RCS file: /home/cvs/logging-log4j/src/java/org/apache/log4j/helpers/OptionConverter.java,v
retrieving revision 1.52
retrieving revision 1.53
diff -u -r1.52 -r1.53
--- OptionConverter.java 11 Feb 2005 18:11:44 -0000 1.52
+++ OptionConverter.java 11 Feb 2005 21:17:11 -0000 1.53
@@ -33,10 +33,12 @@
// Contributors: Avy Sharell
// Matthieu Verbert
// Colin Sampaleanu
+// Curt Arnold
// Contributors: Avy Sharell
// Matthieu Verbert
// Colin Sampaleanu
+// Curt Arnold
/**
* A convenience class to convert property values to specific types.
@@ -45,6 +47,7 @@
* @author Simon Kitching;
* @author Anders Kristensen
* @author Avy Sharell
+ * @author Curt Arnold
*/
public class OptionConverter {
static String DELIM_START = "${";
@@ -538,20 +541,36 @@
}
/**
- * Replaces occurances of double backslashes (if any) in the
- * source string with single backslashes.
+ * Replaces double backslashes (except the leading doubles in UNC's)
+ * with single backslashes for compatibility with existing path specifications
+ * that were working around use of OptionConverter.convertSpecialChars
+ * in XML configuration files.
+ *
* @param src source string
* @return source string with double backslashes replaced
+ *
+ * @since 1.3
*/
public static String stripDuplicateBackslashes(final String src) {
int i = src.lastIndexOf('\\');
if (i > 0) {
StringBuffer buf = new StringBuffer(src);
for(; i > 0; i = src.lastIndexOf('\\', i - 1)) {
+ //
+ // if the preceding character is a slash then
+ // remove the preceding character
+ // and continue processing with the earlier part of the string
if(src.charAt(i - 1) == '\\') {
buf.deleteCharAt(i);
i--;
if (i == 0) break;
+ } else {
+ //
+ // if there was a single slash then
+ // the string was not trying to work around
+ // convertSpecialChars
+ //
+ return src;
}
}
return buf.toString();
1.4 +22 -4 logging-log4j/tests/src/java/org/apache/log4j/helpers/OptionSubstitutionTest.java
Index: OptionSubstitutionTest.java
===================================================================
RCS file: /home/cvs/logging-log4j/tests/src/java/org/apache/log4j/helpers/OptionSubstitutionTest.java,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -r1.3 -r1.4
--- OptionSubstitutionTest.java 11 Feb 2005 18:11:44 -0000 1.3
+++ OptionSubstitutionTest.java 11 Feb 2005 21:17:11 -0000 1.4
@@ -10,6 +10,7 @@
* Test variable substitution code in OptionConverter.substVars method.
*
* @author Ceki Gülcü
+ * @author Curt Arnold
*
* @since 1.0
*/
@@ -127,11 +128,28 @@
assertEquals("HELLO John.", res);
}
+ /**
+ * Tests OptionsConverter.stripDuplicateBackslashes
+ *
+ * @since 1.3
+ */
public void testStripDuplicateBackslashes() {
- assertEquals("\\foo\\bar\\foo", OptionConverter.stripDuplicateBackslashes("\\foo\\\\bar\\foo"));
- assertEquals("\\foo\\bar\\foo\\", OptionConverter.stripDuplicateBackslashes("\\\\foo\\\\bar\\foo\\"));
- assertEquals("\\foo\\bar\\foo\\", OptionConverter.stripDuplicateBackslashes("\\\\foo\\\\bar\\foo\\\\"));
-// assertTrue(false);
+ assertEquals("\\foo\\bar\\foo", OptionConverter.stripDuplicateBackslashes("\\foo\\bar\\foo"));
+ assertEquals("\\foo\\bar\\foo\\", OptionConverter.stripDuplicateBackslashes("\\\\foo\\\\bar\\\\foo\\\\"));
+ assertEquals("\\foo\\bar\\foo\\", OptionConverter.stripDuplicateBackslashes("\\foo\\bar\\foo\\"));
+ //
+ // UNC's should either start with two backslashes and contain additional singles
+ // or four back slashes and addition doubles
+ assertEquals("\\\\foo\\bar\\foo", OptionConverter.stripDuplicateBackslashes("\\\\\\\\foo\\\\bar\\\\foo"));
+ assertEquals("\\\\foo\\bar\\foo", OptionConverter.stripDuplicateBackslashes("\\\\foo\\bar\\foo"));
+ //
+ // it it starts with doubles but has no other path component
+ // then it is a file path
+ assertEquals("\\foo.log", OptionConverter.stripDuplicateBackslashes("\\\\foo.log"));
+ //
+ // it it starts with quads but has no other path component
+ // then it is a UNC
+ assertEquals("\\\\foo.log", OptionConverter.stripDuplicateBackslashes("\\\\\\\\foo.log"));
}
---------------------------------------------------------------------
To unsubscribe, e-mail: log4j-dev-unsubscribe@logging.apache.org
For additional commands, e-mail: log4j-dev-help@logging.apache.org