// b_name column is 500 characters wide
public static final int MAX_COMPONENT_NAME_LENGTH = 500;
public static final int MAX_COMPONENT_DESCRIPTION_LENGTH = 2_000;
- private static final int MAX_COMPONENT_TAGS_LENGTH = 500;
private static final int MAX_COMPONENT_QUALIFIER_LENGTH = 10;
private ComponentValidator() {
return value;
}
- public static String checkTags(@Nullable String value) {
- if (value == null) {
- return null;
- }
-
- checkArgument(value.length() <= MAX_COMPONENT_NAME_LENGTH, "Component tags length (%s) is longer than the maximum authorized (%s). '%s' was provided.",
- value.length(), MAX_COMPONENT_TAGS_LENGTH, value);
- return value;
- }
-
public static String checkComponentKey(String key) {
checkArgument(!isNullOrEmpty(key), "Component key can't be empty");
checkArgument(key.length() <= MAX_COMPONENT_KEY_LENGTH, "Component key length (%s) is longer than the maximum authorized (%s). '%s' was provided.",
*/
@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;
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
--- /dev/null
+/*
+ * 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)");
+ }
+}