o Replace String-comparison with reglar expression pattern matching.
o Require that the drive letter actually is a letter.
o Add more test cases.
git-svn-id: https://svn.apache.org/repos/asf/maven/shared/trunk@1055378 13f79535-47bb-0310-9956-ffa450edef68
diff --git a/src/main/java/org/apache/maven/shared/filtering/FilteringUtils.java b/src/main/java/org/apache/maven/shared/filtering/FilteringUtils.java
index 18f56eb..979986f 100644
--- a/src/main/java/org/apache/maven/shared/filtering/FilteringUtils.java
+++ b/src/main/java/org/apache/maven/shared/filtering/FilteringUtils.java
@@ -19,6 +19,7 @@
* under the License.
*/
+import java.util.regex.Pattern;
import org.codehaus.plexus.util.StringUtils;
/**
@@ -27,6 +28,9 @@
*/
public final class FilteringUtils
{
+ private static final String WINDOWS_PATH_PATTERN = "^[a-zA-Z]:\\\\(.*)";
+
+ private static final Pattern PATTERN = Pattern.compile( WINDOWS_PATH_PATTERN) ;
/**
*
@@ -40,7 +44,7 @@
// How do we distinguish a relative windows path from some other value that happens to contain backslashes??
public static final String escapeWindowsPath( String val )
{
- if ( !StringUtils.isEmpty( val ) && val.indexOf( ":\\" ) == 1 )
+ if ( !StringUtils.isEmpty( val ) && PATTERN.matcher( val ).matches() )
{
// Adapted from StringUtils.replace in plexus-utils to accommodate pre-escaped backslashes.
StringBuffer buf = new StringBuffer( val.length() );
diff --git a/src/test/java/org/apache/maven/shared/filtering/FilteringUtilsTest.java b/src/test/java/org/apache/maven/shared/filtering/FilteringUtilsTest.java
index 200f43f..6d575a9 100644
--- a/src/test/java/org/apache/maven/shared/filtering/FilteringUtilsTest.java
+++ b/src/test/java/org/apache/maven/shared/filtering/FilteringUtilsTest.java
@@ -35,6 +35,16 @@
assertEquals( "C:\\\\Users\\\\Administrator", FilteringUtils.escapeWindowsPath( "C:\\Users\\Administrator" ) );
}
+ public void testEscapeWindowsPathMissingDriveLetter()
+ {
+ assertEquals( ":\\Users\\Administrator", FilteringUtils.escapeWindowsPath( ":\\Users\\Administrator" ) );
+ }
+
+ public void testEscapeWindowsPathInvalidDriveLetter()
+ {
+ assertEquals( "4:\\Users\\Administrator", FilteringUtils.escapeWindowsPath( "4:\\Users\\Administrator" ) );
+ }
+
// This doesn't work, see MSHARED-121
/*
public void testEscapeWindowsPathStartingWithDrivelessAbsolutePath()