aboutsummaryrefslogtreecommitdiffstats
path: root/sonar-plugin-api-impl
diff options
context:
space:
mode:
authorDuarte Meneses <duarte.meneses@sonarsource.com>2023-01-03 15:00:42 -0600
committersonartech <sonartech@sonarsource.com>2023-01-05 20:02:56 +0000
commita62476dc4ebbb8760d1df58275b12cc9f6124597 (patch)
treeb2dab0d9db28d8270ccbf41a52768966831c5a85 /sonar-plugin-api-impl
parentc75f6ec98d2171c232537612e7f1d628e5535e61 (diff)
downloadsonarqube-a62476dc4ebbb8760d1df58275b12cc9f6124597.tar.gz
sonarqube-a62476dc4ebbb8760d1df58275b12cc9f6124597.zip
SONAR-14584 Analysis of the project can fail if path of the file exceeds 400 character limit
Diffstat (limited to 'sonar-plugin-api-impl')
-rw-r--r--sonar-plugin-api-impl/src/main/java/org/sonar/api/batch/fs/internal/DefaultIndexedFile.java10
-rw-r--r--sonar-plugin-api-impl/src/test/java/org/sonar/api/batch/fs/internal/DefaultIndexedFileTest.java38
2 files changed, 48 insertions, 0 deletions
diff --git a/sonar-plugin-api-impl/src/main/java/org/sonar/api/batch/fs/internal/DefaultIndexedFile.java b/sonar-plugin-api-impl/src/main/java/org/sonar/api/batch/fs/internal/DefaultIndexedFile.java
index d803e27fc37..2346a8e65d8 100644
--- a/sonar-plugin-api-impl/src/main/java/org/sonar/api/batch/fs/internal/DefaultIndexedFile.java
+++ b/sonar-plugin-api-impl/src/main/java/org/sonar/api/batch/fs/internal/DefaultIndexedFile.java
@@ -38,6 +38,8 @@ import org.sonar.api.utils.PathUtils;
*/
@Immutable
public class DefaultIndexedFile extends DefaultInputComponent implements IndexedFile {
+ // should match limit in org.sonar.core.component.ComponentKeys
+ private static final Integer MAX_KEY_LENGTH = 400;
private static final AtomicInteger intGenerator = new AtomicInteger(0);
private final String projectRelativePath;
@@ -73,6 +75,14 @@ public class DefaultIndexedFile extends DefaultInputComponent implements Indexed
this.sensorStrategy = sensorStrategy;
this.absolutePath = absolutePath;
this.oldRelativeFilePath = oldRelativeFilePath;
+ validateKeyLength();
+ }
+
+ private void validateKeyLength() {
+ String key = key();
+ if (key.length() > MAX_KEY_LENGTH) {
+ throw new IllegalStateException(String.format("Component key (%s) length (%s) is longer than the maximum authorized (%s)", key, key.length(), MAX_KEY_LENGTH));
+ }
}
@Override
diff --git a/sonar-plugin-api-impl/src/test/java/org/sonar/api/batch/fs/internal/DefaultIndexedFileTest.java b/sonar-plugin-api-impl/src/test/java/org/sonar/api/batch/fs/internal/DefaultIndexedFileTest.java
new file mode 100644
index 00000000000..29edc62eaed
--- /dev/null
+++ b/sonar-plugin-api-impl/src/test/java/org/sonar/api/batch/fs/internal/DefaultIndexedFileTest.java
@@ -0,0 +1,38 @@
+/*
+ * SonarQube
+ * Copyright (C) 2009-2023 SonarSource SA
+ * mailto:info AT sonarsource DOT com
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 3 of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with this program; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ */
+package org.sonar.api.batch.fs.internal;
+
+import java.nio.file.Path;
+import java.nio.file.Paths;
+import org.apache.commons.lang.StringUtils;
+import org.assertj.core.api.Assertions;
+import org.junit.Test;
+
+public class DefaultIndexedFileTest {
+ @Test
+ public void fail_to_index_if_file_key_too_long() {
+ String path = StringUtils.repeat("a", 395);
+ String projectKey = "12345";
+ Path baseDir = Paths.get("");
+ Assertions.assertThatThrownBy(() -> new DefaultIndexedFile(projectKey, baseDir, path, null))
+ .isInstanceOf(IllegalStateException.class)
+ .hasMessageEndingWith("length (401) is longer than the maximum authorized (400)");
+ }
+}