From 138c036e9b0803ab8cee9755aed6484c82ab4115 Mon Sep 17 00:00:00 2001 From: Fishermans Date: Wed, 30 Mar 2022 20:13:37 +0200 Subject: [PATCH 1/2] Fixed #191 --- .../codehaus/plexus/util/SelectorUtils.java | 31 ++++++++--- .../plexus/util/SelectorUtilsTest.java | 51 +++++++++++++++++++ 2 files changed, 74 insertions(+), 8 deletions(-) diff --git a/src/main/java/org/codehaus/plexus/util/SelectorUtils.java b/src/main/java/org/codehaus/plexus/util/SelectorUtils.java index de39f4fe..99894b36 100644 --- a/src/main/java/org/codehaus/plexus/util/SelectorUtils.java +++ b/src/main/java/org/codehaus/plexus/util/SelectorUtils.java @@ -251,23 +251,38 @@ public static boolean matchPath( String pattern, String str, boolean isCaseSensi public static boolean matchPath( String pattern, String str, String separator, boolean isCaseSensitive ) { - if ( isRegexPrefixedPattern( pattern ) ) + /* 2022-03-30: Fixed: Caller parameter in a public method should be handled immutable. */ + String localPattern = pattern; + if ( isRegexPrefixedPattern( localPattern ) ) { - pattern = - pattern.substring( REGEX_HANDLER_PREFIX.length(), pattern.length() - PATTERN_HANDLER_SUFFIX.length() ); + localPattern = + localPattern.substring( REGEX_HANDLER_PREFIX.length(), localPattern.length() - PATTERN_HANDLER_SUFFIX.length() ); - return str.matches( pattern ); + return str.matches( localPattern ); } else { - if ( isAntPrefixedPattern( pattern ) ) + if ( isAntPrefixedPattern( localPattern ) ) { - pattern = pattern.substring( ANT_HANDLER_PREFIX.length(), - pattern.length() - PATTERN_HANDLER_SUFFIX.length() ); + localPattern = localPattern.substring( ANT_HANDLER_PREFIX.length(), + localPattern.length() - PATTERN_HANDLER_SUFFIX.length() ); } + final String osRelatedPath = toOSRelatedPath( str, separator ); + final String osRelatedPattern = toOSRelatedPath( localPattern, separator ); + return matchAntPathPattern( osRelatedPattern, osRelatedPath, separator, isCaseSensitive ); + } + } - return matchAntPathPattern( pattern, str, separator, isCaseSensitive ); + private static String toOSRelatedPath( String pattern, String separator ) + { + if ( "/".equals( separator ) ) + { + return pattern.replace( "\\", separator ); + } + if ( "\\".equals( separator ) ) { + return pattern.replace( "/", separator ); } + return pattern; } static boolean isRegexPrefixedPattern( String pattern ) diff --git a/src/test/java/org/codehaus/plexus/util/SelectorUtilsTest.java b/src/test/java/org/codehaus/plexus/util/SelectorUtilsTest.java index ebc2dca0..8c1b7bba 100644 --- a/src/test/java/org/codehaus/plexus/util/SelectorUtilsTest.java +++ b/src/test/java/org/codehaus/plexus/util/SelectorUtilsTest.java @@ -92,4 +92,55 @@ public void testMatchPath_WindowsFileSeparator() // Pattern and target don't start with file separator assertTrue( SelectorUtils.matchPath( "*" + separator + "a.txt", "b" + separator + "a.txt", separator, false ) ); } + + @Test + public void testPatternMatchSingleWildCardLinux() + { + assertFalse(SelectorUtils.matchPath( + "/com/test/*", + "/com/test/test/hallo")); + } + + + @Test + public void testPatternMatchDoubleWildCardCaseInLinux() + { + assertTrue(SelectorUtils.matchPath( + "/com/test/**", + "/com/test/test/hallo")); + } + + + @Test + public void testPatternMatchDoubleWildCardLinux() + { + assertTrue(SelectorUtils.matchPath( + "/com/test/**", + "/com/test/test/hallo")); + } + + + @Test + public void testPatternMatchSingleWildCardWindows() + { + assertFalse(SelectorUtils.matchPath( + "D:\\com\\test\\*", + "D:\\com\\test\\test\\hallo")); + + assertFalse(SelectorUtils.matchPath( + "D:/com/test/*", + "D:/com/test/test/hallo")); + } + + @Test + public void testPatternMatchDoubleWildCardWindows() + { + assertTrue(SelectorUtils.matchPath( + "D:\\com\\test\\**", + "D:\\com\\test\\test\\hallo")); + + assertTrue(SelectorUtils.matchPath( + "D:\\com\\test\\**", + "D:/com/test/test/hallo")); + } } From d2c554fc5405dc44be439bd194b9d8712a030e9b Mon Sep 17 00:00:00 2001 From: Fishermans Date: Tue, 26 Apr 2022 23:06:44 +0200 Subject: [PATCH 2/2] Fixed #191 --- .../org/codehaus/plexus/util/SelectorUtils.java | 16 ++++++---------- 1 file changed, 6 insertions(+), 10 deletions(-) diff --git a/src/main/java/org/codehaus/plexus/util/SelectorUtils.java b/src/main/java/org/codehaus/plexus/util/SelectorUtils.java index 99894b36..234a92c5 100644 --- a/src/main/java/org/codehaus/plexus/util/SelectorUtils.java +++ b/src/main/java/org/codehaus/plexus/util/SelectorUtils.java @@ -251,22 +251,18 @@ public static boolean matchPath( String pattern, String str, boolean isCaseSensi public static boolean matchPath( String pattern, String str, String separator, boolean isCaseSensitive ) { - /* 2022-03-30: Fixed: Caller parameter in a public method should be handled immutable. */ - String localPattern = pattern; - if ( isRegexPrefixedPattern( localPattern ) ) + if ( isRegexPrefixedPattern( pattern ) ) { - localPattern = - localPattern.substring( REGEX_HANDLER_PREFIX.length(), localPattern.length() - PATTERN_HANDLER_SUFFIX.length() ); + String localPattern = + pattern.substring( REGEX_HANDLER_PREFIX.length(), pattern.length() - PATTERN_HANDLER_SUFFIX.length() ); return str.matches( localPattern ); } else { - if ( isAntPrefixedPattern( localPattern ) ) - { - localPattern = localPattern.substring( ANT_HANDLER_PREFIX.length(), - localPattern.length() - PATTERN_HANDLER_SUFFIX.length() ); - } + String localPattern = isAntPrefixedPattern( pattern ) + ? pattern.substring( ANT_HANDLER_PREFIX.length(), pattern.length() - PATTERN_HANDLER_SUFFIX.length() ) + : pattern; final String osRelatedPath = toOSRelatedPath( str, separator ); final String osRelatedPattern = toOSRelatedPath( localPattern, separator ); return matchAntPathPattern( osRelatedPattern, osRelatedPath, separator, isCaseSensitive );