]> source.dussan.org Git - sonarqube.git/commitdiff
SONAR-6424 Colon character should be escaped in URL (#931)
authorEvgeny Mandrikov <Godin@users.noreply.github.com>
Mon, 9 May 2016 12:49:51 +0000 (14:49 +0200)
committerStas Vilchik <vilchiks@gmail.com>
Mon, 9 May 2016 12:49:51 +0000 (16:49 +0400)
server/sonar-server/src/main/java/org/sonar/server/text/RuleMacro.java
server/sonar-server/src/test/java/org/sonar/server/text/MacroInterpreterTest.java

index a9755c34c6ece284ced79e50225f7dc88621de67..93456222514cc355dc7ee679b1b8557ea0c7d94f 100644 (file)
@@ -21,6 +21,7 @@ package org.sonar.server.text;
 
 class RuleMacro implements Macro {
 
+  private static final String COLON = "%3A";
   private final String contextPath;
 
   RuleMacro(String contextPath) {
@@ -37,6 +38,6 @@ class RuleMacro implements Macro {
 
   @Override
   public String getReplacement() {
-    return "<a href='" + contextPath + "/coding_rules#rule_key=$1:$2'>$2</a>";
+    return "<a href='" + contextPath + "/coding_rules#rule_key=$1" + COLON + "$2'>$2</a>";
   }
 }
index dbcf65d8fc941423b27686732c988977f628ebf2..153dbc9dab7f3f1316501b5a5bfa20e71eaa4579 100644 (file)
@@ -48,17 +48,12 @@ public class MacroInterpreterTest {
 
   @Test
   public void should_replace_rule_macro() {
-    String ruleKey = "repo:key";
+    // key of repository and rule can contain alphanumeric latin characters, dashes, underscores and dots
+    String ruleKey = "Some_Repo-Key.1:Some_Rule-Key.1";
     String origin = "See {rule:" + ruleKey + "} for detail.";
     String result = interpreter.interpret(origin);
-    assertThat(result).isEqualTo("See <a href='" + path + "/coding_rules#rule_key=" + ruleKey + "'>key</a> for detail.");
+    // colon should be escaped
+    assertThat(result).isEqualTo("See <a href='" + path + "/coding_rules#rule_key=Some_Repo-Key.1%3ASome_Rule-Key.1'>Some_Rule-Key.1</a> for detail.");
   }
 
-  @Test
-  public void should_replace_rule_macro_containing_digit_and_dash() {
-    String ruleKey = "my-repo1:my-key1";
-    String origin = "See {rule:" + ruleKey + "} for detail.";
-    String result = interpreter.interpret(origin);
-    assertThat(result).isEqualTo("See <a href='" + path + "/coding_rules#rule_key=" + ruleKey + "'>my-key1</a> for detail.");
-  }
 }