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