aboutsummaryrefslogtreecommitdiffstats
path: root/sonar-core/src
diff options
context:
space:
mode:
authorJulien Lancelot <julien.lancelot@sonarsource.com>2020-03-04 18:06:32 +0100
committersonartech <sonartech@sonarsource.com>2020-03-12 20:04:29 +0000
commitec384a1e6926c801dc5167807f26b1f2ef6baf84 (patch)
treeffa22fe9324d16006a61ef8739cf277d99092e76 /sonar-core/src
parent0433161433a5f234790fae5eba2cf438cbde5d36 (diff)
downloadsonarqube-ec384a1e6926c801dc5167807f26b1f2ef6baf84.tar.gz
sonarqube-ec384a1e6926c801dc5167807f26b1f2ef6baf84.zip
SONAR-13160 Fix display of Portfolio Admin page when project contains UTF-8 characters
Diffstat (limited to 'sonar-core/src')
-rw-r--r--sonar-core/src/main/java/org/sonar/core/component/ComponentKeys.java23
-rw-r--r--sonar-core/src/test/java/org/sonar/core/component/ComponentKeysTest.java29
2 files changed, 34 insertions, 18 deletions
diff --git a/sonar-core/src/main/java/org/sonar/core/component/ComponentKeys.java b/sonar-core/src/main/java/org/sonar/core/component/ComponentKeys.java
index 8378a30bab1..5eb95b14534 100644
--- a/sonar-core/src/main/java/org/sonar/core/component/ComponentKeys.java
+++ b/sonar-core/src/main/java/org/sonar/core/component/ComponentKeys.java
@@ -19,6 +19,7 @@
*/
package org.sonar.core.component;
+import java.util.regex.Pattern;
import javax.annotation.Nullable;
import org.apache.commons.lang.StringUtils;
@@ -28,15 +29,14 @@ public final class ComponentKeys {
public static final int MAX_COMPONENT_KEY_LENGTH = 400;
- /*
- * Must not be blank or empty
- */
- private static final String VALID_PROJECT_KEY_REGEXP = "[^\\p{javaWhitespace}]+";
+ public static final String ALLOWED_CHARACTERS_MESSAGE = "Allowed characters are alphanumeric, '-', '_', '.' and ':', with at least one non-digit";
+
+ public static final String MALFORMED_KEY_MESSAGE = "Malformed key for '%s'. %s.";
- /*
- * Allowed characters are alphanumeric, '-', '_', '.' and '/'
+ /**
+ * Allowed characters are alphanumeric, '-', '_', '.' and ':', with at least one non-digit
*/
- private static final String VALID_BRANCH_REGEXP = "[\\p{Alnum}\\-_./]*";
+ private static final Pattern VALID_PROJECT_KEY_REGEXP = Pattern.compile("[\\p{Alnum}\\-_.:]*[\\p{Alpha}\\-_.:]+[\\p{Alnum}\\-_.:]*");
private static final String KEY_WITH_BRANCH_FORMAT = "%s:%s";
@@ -53,13 +53,8 @@ public final class ComponentKeys {
return sb.toString();
}
- /**
- * Test if given parameter is valid for a project. A key is valid if it doesn't contain whitespaces.
- *
- * @return <code>true</code> if <code>keyCandidate</code> can be used for a project
- */
public static boolean isValidProjectKey(String keyCandidate) {
- return keyCandidate.matches(VALID_PROJECT_KEY_REGEXP);
+ return VALID_PROJECT_KEY_REGEXP.matcher(keyCandidate).matches();
}
/**
@@ -68,7 +63,7 @@ public final class ComponentKeys {
* @throws IllegalArgumentException if the format is incorrect
*/
public static void checkProjectKey(String keyCandidate) {
- checkArgument(isValidProjectKey(keyCandidate), "Malformed key for '%s'. %s", keyCandidate, "Project key cannot be empty nor contain whitespaces.");
+ checkArgument(isValidProjectKey(keyCandidate), MALFORMED_KEY_MESSAGE, keyCandidate, ALLOWED_CHARACTERS_MESSAGE);
}
/**
diff --git a/sonar-core/src/test/java/org/sonar/core/component/ComponentKeysTest.java b/sonar-core/src/test/java/org/sonar/core/component/ComponentKeysTest.java
index 05848ac1c56..eef16fac229 100644
--- a/sonar-core/src/test/java/org/sonar/core/component/ComponentKeysTest.java
+++ b/sonar-core/src/test/java/org/sonar/core/component/ComponentKeysTest.java
@@ -37,12 +37,18 @@ public class ComponentKeysTest {
}
@Test
- public void isValidProjectKey() {
+ public void valid_project_key() {
assertThat(ComponentKeys.isValidProjectKey("abc")).isTrue();
- assertThat(ComponentKeys.isValidProjectKey("0123")).isTrue();
assertThat(ComponentKeys.isValidProjectKey("ab_12")).isTrue();
- assertThat(ComponentKeys.isValidProjectKey("ab/12")).isTrue();
- assertThat(ComponentKeys.isValidProjectKey("코드품질")).isTrue();
+ }
+
+ @Test
+ public void invalid_project_key() {
+ assertThat(ComponentKeys.isValidProjectKey("0123")).isFalse();
+
+ assertThat(ComponentKeys.isValidProjectKey("ab/12")).isFalse();
+ assertThat(ComponentKeys.isValidProjectKey("코드품질")).isFalse();
+
assertThat(ComponentKeys.isValidProjectKey("")).isFalse();
assertThat(ComponentKeys.isValidProjectKey(" ")).isFalse();
assertThat(ComponentKeys.isValidProjectKey("ab 12")).isFalse();
@@ -69,4 +75,19 @@ public class ComponentKeysTest {
ComponentKeys.checkProjectKey("ab 12");
}
+
+ @Test
+ public void checkProjectKey_fail_if_only_digit() {
+ expectedException.expect(IllegalArgumentException.class);
+ expectedException.expectMessage("Malformed key for '0123'. Allowed characters are alphanumeric, '-', '_', '.' and ':', with at least one non-digit.");
+
+ ComponentKeys.checkProjectKey("0123");
+ }
+
+ @Test
+ public void checkProjectKey_fail_if_special_characters_not_allowed() {
+ expectedException.expect(IllegalArgumentException.class);
+
+ ComponentKeys.checkProjectKey("ab/12");
+ }
}