From 86199988a0f6e1f017236ae37b4abe6111ec155b Mon Sep 17 00:00:00 2001 From: Sebastian Sdorra Date: Wed, 11 Sep 2013 09:44:59 +0200 Subject: [PATCH 1/2] fix escaping bug in SearchUtil --- .../java/sonia/scm/search/SearchUtil.java | 3 +- .../java/sonia/scm/search/SearchUtilTest.java | 77 +++++++++++-------- 2 files changed, 49 insertions(+), 31 deletions(-) diff --git a/scm-core/src/main/java/sonia/scm/search/SearchUtil.java b/scm-core/src/main/java/sonia/scm/search/SearchUtil.java index 2a4d4aa8f5..c65af09250 100644 --- a/scm-core/src/main/java/sonia/scm/search/SearchUtil.java +++ b/scm-core/src/main/java/sonia/scm/search/SearchUtil.java @@ -45,6 +45,7 @@ import java.util.Collection; import java.util.Iterator; import java.util.List; import java.util.Locale; +import java.util.regex.Pattern; /** * @@ -197,7 +198,7 @@ public final class SearchUtil query = query.toLowerCase(Locale.ENGLISH); } - query = query.replace("*", ".*").replace("?", "."); + query = query.replace("\\", "\\\\").replace("*", ".*").replace("?", "."); query = ".*".concat(query).concat(".*"); if (request.isIgnoreCase()) diff --git a/scm-core/src/test/java/sonia/scm/search/SearchUtilTest.java b/scm-core/src/test/java/sonia/scm/search/SearchUtilTest.java index 7a13a69885..8aebfa9dbd 100644 --- a/scm-core/src/test/java/sonia/scm/search/SearchUtilTest.java +++ b/scm-core/src/test/java/sonia/scm/search/SearchUtilTest.java @@ -54,11 +54,9 @@ public class SearchUtilTest public void testMultiMatchesAll() { assertTrue(SearchUtil.matchesAll(new SearchRequest("test"), "test", - "test hello", "hello test", - "hello test hello")); + "test hello", "hello test", "hello test hello")); assertFalse(SearchUtil.matchesAll(new SearchRequest("test"), "test", - "test hello", "hello test", - "hello test hello", "ka")); + "test hello", "hello test", "hello test hello", "ka")); } /** @@ -69,13 +67,11 @@ public class SearchUtilTest public void testMultiMatchesOne() { assertTrue(SearchUtil.matchesOne(new SearchRequest("test"), "test", - "test hello", "hello test", - "hello test hello")); + "test hello", "hello test", "hello test hello")); assertTrue(SearchUtil.matchesOne(new SearchRequest("test"), "test", - "test hello", "hello test", - "hello test hello", "ka")); + "test hello", "hello test", "hello test hello", "ka")); assertTrue(SearchUtil.matchesOne(new SearchRequest("test"), "hans", "uew", - "klaus", "hello test hello", "ka")); + "klaus", "hello test hello", "ka")); } /** @@ -89,15 +85,15 @@ public class SearchUtilTest assertTrue(SearchUtil.matchesAll(new SearchRequest("test"), "hello test")); assertTrue(SearchUtil.matchesAll(new SearchRequest("test"), "test hello")); assertTrue(SearchUtil.matchesAll(new SearchRequest("test"), - "hello test hello")); + "hello test hello")); assertFalse(SearchUtil.matchesAll(new SearchRequest("test"), - "hello hello")); + "hello hello")); assertFalse(SearchUtil.matchesAll(new SearchRequest("test"), - "hello te hello")); + "hello te hello")); assertFalse(SearchUtil.matchesAll(new SearchRequest("test"), - "hello TEST hello")); + "hello TEST hello")); assertFalse(SearchUtil.matchesAll(new SearchRequest("test"), - "hello TesT hello")); + "hello TesT hello")); } /** @@ -109,15 +105,15 @@ public class SearchUtilTest { assertTrue(SearchUtil.matchesAll(new SearchRequest("test", true), "tEsT")); assertTrue(SearchUtil.matchesAll(new SearchRequest("test", true), - "heLLo teSt")); + "heLLo teSt")); assertTrue(SearchUtil.matchesAll(new SearchRequest("test", true), - "TEST hellO")); + "TEST hellO")); assertTrue(SearchUtil.matchesAll(new SearchRequest("test", true), - "hEllO tEsT hEllO")); + "hEllO tEsT hEllO")); assertFalse(SearchUtil.matchesAll(new SearchRequest("test", true), - "heLLo heLLo")); + "heLLo heLLo")); assertFalse(SearchUtil.matchesAll(new SearchRequest("test", true), - "heLLo te heLLo")); + "heLLo te heLLo")); } /** @@ -131,15 +127,15 @@ public class SearchUtilTest assertTrue(SearchUtil.matchesOne(new SearchRequest("test"), "hello test")); assertTrue(SearchUtil.matchesOne(new SearchRequest("test"), "test hello")); assertTrue(SearchUtil.matchesOne(new SearchRequest("test"), - "hello test hello")); + "hello test hello")); assertFalse(SearchUtil.matchesOne(new SearchRequest("test"), - "hello hello")); + "hello hello")); assertFalse(SearchUtil.matchesOne(new SearchRequest("test"), - "hello te hello")); + "hello te hello")); assertFalse(SearchUtil.matchesOne(new SearchRequest("test"), - "hello TEST hello")); + "hello TEST hello")); assertFalse(SearchUtil.matchesOne(new SearchRequest("test"), - "hello TesT hello")); + "hello TesT hello")); } /** @@ -151,15 +147,36 @@ public class SearchUtilTest { assertTrue(SearchUtil.matchesOne(new SearchRequest("test", true), "tEsT")); assertTrue(SearchUtil.matchesOne(new SearchRequest("test", true), - "heLLo teSt")); + "heLLo teSt")); assertTrue(SearchUtil.matchesOne(new SearchRequest("test", true), - "TEST hellO")); + "TEST hellO")); assertTrue(SearchUtil.matchesOne(new SearchRequest("test", true), - "hEllO tEsT hEllO")); + "hEllO tEsT hEllO")); assertFalse(SearchUtil.matchesOne(new SearchRequest("test", true), - "heLLo heLLo")); + "heLLo heLLo")); assertFalse(SearchUtil.matchesOne(new SearchRequest("test", true), - "heLLo te heLLo")); + "heLLo te heLLo")); + } + + /** + * Test for issue 441 + * + */ + @Test + public void testSpecialCharacter() + { + assertTrue(SearchUtil.matchesAll(new SearchRequest("test\\hansolo"), + "test\\hansolo")); + assertTrue(SearchUtil.matchesAll(new SearchRequest("*\\hansolo"), + "test\\hansolo")); + assertTrue(SearchUtil.matchesAll(new SearchRequest("test\\*"), + "test\\hansolo")); + assertTrue(SearchUtil.matchesAll(new SearchRequest("test\\hansolo"), + "abc test\\hansolo abc")); + assertFalse(SearchUtil.matchesAll(new SearchRequest("test\\hansolo"), + "testhansolo")); + assertFalse(SearchUtil.matchesAll(new SearchRequest("test\\hansolo"), + "test\\hnsolo")); } /** @@ -170,7 +187,7 @@ public class SearchUtilTest public void testWildcardMatches() { assertTrue(SearchUtil.matchesAll(new SearchRequest("*test*"), - "hello test hello")); + "hello test hello")); assertTrue(SearchUtil.matchesAll(new SearchRequest("?es?"), "test")); assertTrue(SearchUtil.matchesAll(new SearchRequest("t*t"), "test")); } From 7a565c75aa387f71d982f4ff0c0b19c1112eb55c Mon Sep 17 00:00:00 2001 From: Sebastian Sdorra Date: Thu, 12 Sep 2013 20:04:50 +0200 Subject: [PATCH 2/2] close branch issue-441