diff options
author | Duarte Meneses <duarte.meneses@sonarsource.com> | 2023-01-03 15:00:42 -0600 |
---|---|---|
committer | sonartech <sonartech@sonarsource.com> | 2023-01-05 20:02:56 +0000 |
commit | a62476dc4ebbb8760d1df58275b12cc9f6124597 (patch) | |
tree | b2dab0d9db28d8270ccbf41a52768966831c5a85 /sonar-plugin-api-impl | |
parent | c75f6ec98d2171c232537612e7f1d628e5535e61 (diff) | |
download | sonarqube-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')
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)"); + } +} |