]> source.dussan.org Git - sonarqube.git/commitdiff
SONAR-8462 escape param "q" in WS api/rules/repositories"
authorSimon Brandhof <simon.brandhof@sonarsource.com>
Thu, 1 Dec 2016 13:09:58 +0000 (14:09 +0100)
committerSimon Brandhof <simon.brandhof@sonarsource.com>
Thu, 1 Dec 2016 14:14:14 +0000 (15:14 +0100)
server/sonar-server/src/main/java/org/sonar/server/rule/ws/RepositoriesAction.java
server/sonar-server/src/test/java/org/sonar/server/rule/ws/RepositoriesActionTest.java

index e21a44b874a14bd774a31e6cccade967dfee2945..2a5106c91307d0e3e0624aff2bc865d2bba44bff 100644 (file)
@@ -84,7 +84,7 @@ public class RepositoriesAction implements RulesWsAction {
   }
 
   private Collection<RuleRepositoryDto> listMatchingRepositories(@Nullable String query, @Nullable String languageKey) {
-    Pattern pattern = Pattern.compile(query == null ? MATCH_ALL : MATCH_ALL + query + MATCH_ALL, Pattern.CASE_INSENSITIVE);
+    Pattern pattern = Pattern.compile(query == null ? MATCH_ALL : MATCH_ALL + Pattern.quote(query) + MATCH_ALL, Pattern.CASE_INSENSITIVE);
 
     return selectFromDb(languageKey).stream()
       .filter(r -> pattern.matcher(r.getKey()).matches() || pattern.matcher(r.getName()).matches())
index d73535d881bc8fd7b04d752a23f6c4e0a96505e3..2eb759c4b671670eb90877f47357331b1f93d181 100644 (file)
@@ -33,6 +33,7 @@ import static java.util.Arrays.asList;
 
 public class RepositoriesActionTest {
 
+  private static final String EMPTY_JSON_RESPONSE = "{\"repositories\":[]}";
   private WsTester wsTester;
 
   @Rule
@@ -40,11 +41,6 @@ public class RepositoriesActionTest {
 
   @Before
   public void setUp() {
-    wsTester = new WsTester(new RulesWs(new RepositoriesAction(dbTester.getDbClient())));
-  }
-
-  @Test
-  public void should_list_repositories() throws Exception {
     DbSession dbSession = dbTester.getSession();
     RuleRepositoryDto repo1 = new RuleRepositoryDto("xoo", "xoo", "SonarQube");
     RuleRepositoryDto repo2 = new RuleRepositoryDto("squid", "ws", "SonarQube");
@@ -53,15 +49,32 @@ public class RepositoriesActionTest {
     dbSession.commit();
 
     wsTester = new WsTester(new RulesWs(new RepositoriesAction(dbTester.getDbClient())));
+  }
 
+  @Test
+  public void should_list_repositories() throws Exception {
     newRequest().execute().assertJson(this.getClass(), "repositories.json");
     newRequest().setParam("language", "xoo").execute().assertJson(this.getClass(), "repositories_xoo.json");
     newRequest().setParam("language", "ws").execute().assertJson(this.getClass(), "repositories_ws.json");
+  }
+
+  @Test
+  public void filter_repositories_by_name() throws Exception {
     newRequest().setParam("q", "common").execute().assertJson(this.getClass(), "repositories_common.json");
     newRequest().setParam("q", "squid").execute().assertJson(this.getClass(), "repositories_squid.json");
     newRequest().setParam("q", "sonar").execute().assertJson(this.getClass(), "repositories_sonar.json");
   }
 
+  @Test
+  public void do_not_consider_query_as_regexp_when_filtering_repositories_by_name() throws Exception {
+    // invalid regexp : do not fail. Query is not a regexp.
+    newRequest().setParam("q", "[").execute().assertJson(EMPTY_JSON_RESPONSE);
+
+    // this is not the "match all" regexp
+    newRequest().setParam("q", ".*").execute().assertJson(EMPTY_JSON_RESPONSE);
+
+  }
+
   protected TestRequest newRequest() {
     return wsTester.newGetRequest("api/rules", "repositories");
   }