Skip to content

Commit c38a540

Browse files
authored
SLCORE-1545 Update dependencies to fix CVEs (#1434)
1 parent 75b2380 commit c38a540

File tree

31 files changed

+414
-358
lines changed

31 files changed

+414
-358
lines changed

backend/commons/src/test/java/org/sonarsource/sonarlint/core/commons/testutils/MockWebServerExtension.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -55,7 +55,7 @@ public MockResponse dispatch(RecordedRequest request) {
5555
if (responsesByPath.containsKey(request.getPath())) {
5656
return responsesByPath.get(request.getPath());
5757
}
58-
return new MockResponse().setResponseCode(404);
58+
return new MockResponse.Builder().code(404).build();
5959
}
6060
};
6161
server.setDispatcher(dispatcher);
@@ -80,7 +80,7 @@ public void shutdown() {
8080
}
8181

8282
public void addStringResponse(String path, String body) {
83-
responsesByPath.put(path, new MockResponse().setBody(body));
83+
responsesByPath.put(path, new MockResponse.Builder().body(body).build());
8484
}
8585

8686
public void removeResponse(String path) {
@@ -110,7 +110,7 @@ public String url(String path) {
110110

111111
public void addResponseFromResource(String path, String responseResourcePath) {
112112
try (var b = new Buffer()) {
113-
responsesByPath.put(path, new MockResponse().setBody(b.readFrom(requireNonNull(MockWebServerExtension.class.getResourceAsStream(responseResourcePath)))));
113+
responsesByPath.put(path, new MockResponse.Builder().body(b.readFrom(requireNonNull(MockWebServerExtension.class.getResourceAsStream(responseResourcePath)))).build());
114114
} catch (IOException e) {
115115
fail(e);
116116
}

backend/core/pom.xml

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -82,6 +82,10 @@
8282
<groupId>org.apache.commons</groupId>
8383
<artifactId>commons-lang3</artifactId>
8484
</dependency>
85+
<dependency>
86+
<groupId>org.apache.commons</groupId>
87+
<artifactId>commons-text</artifactId>
88+
</dependency>
8589
<dependency>
8690
<groupId>commons-codec</groupId>
8791
<artifactId>commons-codec</artifactId>

backend/core/src/main/java/org/sonarsource/sonarlint/core/BindingClueProvider.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -42,8 +42,8 @@
4242
import org.sonarsource.sonarlint.core.rpc.protocol.common.SonarCloudRegion;
4343

4444
import static java.util.stream.Collectors.toSet;
45-
import static org.apache.commons.lang.StringUtils.isBlank;
46-
import static org.apache.commons.lang.StringUtils.trimToNull;
45+
import static org.apache.commons.lang3.StringUtils.isBlank;
46+
import static org.apache.commons.lang3.StringUtils.trimToNull;
4747
import static org.sonarsource.sonarlint.core.commons.log.SonarLintLogger.singlePlural;
4848

4949
public class BindingClueProvider {

backend/core/src/main/java/org/sonarsource/sonarlint/core/ConnectionSuggestionProvider.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@
2828
import java.util.Optional;
2929
import java.util.Set;
3030
import java.util.stream.Collectors;
31+
import org.apache.commons.lang3.Strings;
3132
import org.jetbrains.annotations.NotNull;
3233
import org.sonarsource.sonarlint.core.commons.log.SonarLintLogger;
3334
import org.sonarsource.sonarlint.core.commons.progress.ExecutorServiceShutdownWatchable;
@@ -47,7 +48,6 @@
4748
import org.sonarsource.sonarlint.core.rpc.protocol.common.Either;
4849
import org.springframework.context.event.EventListener;
4950

50-
import static org.apache.commons.lang.StringUtils.removeEnd;
5151
import static org.sonarsource.sonarlint.core.BindingClueProvider.ALL_BINDING_CLUE_FILENAMES;
5252

5353
public class ConnectionSuggestionProvider {
@@ -159,7 +159,7 @@ private Optional<Either<String, String>> handleBindingClue(BindingClueProvider.B
159159
var serverUrl = sonarQubeBindingClue.getServerUrl();
160160
var connection = connectionRepository.findByUrl(serverUrl);
161161
if (connection.isEmpty()) {
162-
return Optional.of(Either.forLeft(removeEnd(serverUrl, "/")));
162+
return Optional.of(Either.forLeft(Strings.CS.removeEnd(serverUrl, "/")));
163163
}
164164
} else {
165165
LOG.debug("Found an invalid binding clue for connection suggestion");

backend/core/src/main/java/org/sonarsource/sonarlint/core/SonarCloudActiveEnvironment.java

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -23,9 +23,9 @@
2323
import java.util.Map;
2424
import java.util.Optional;
2525
import java.util.stream.Collectors;
26+
import org.apache.commons.lang3.Strings;
2627
import org.sonarsource.sonarlint.core.rpc.protocol.backend.initialize.SonarQubeCloudRegionDto;
2728

28-
import static org.apache.commons.lang.StringUtils.removeEnd;
2929

3030
public class SonarCloudActiveEnvironment {
3131
private final Map<SonarCloudRegion, SonarQubeCloudRegionDto> alternativeRegionUris;
@@ -75,18 +75,18 @@ public SonarCloudRegion getRegionOrThrow(String uri) {
7575

7676
throw new IllegalArgumentException("URI should be a known SonarCloud URI");
7777
}
78-
78+
7979
private Optional<SonarCloudRegion> getRegionByUri(String uri) {
80-
var cleanedUri = removeEnd(uri, "/");
80+
var cleanedUri = Strings.CS.removeEnd(uri, "/");
8181
for (var entry : alternativeRegionUris.entrySet()) {
82-
var regionDto = entry.getValue();
83-
if (regionDto.getUri() != null && removeEnd(regionDto.getUri().toString(), "/").equals(cleanedUri)) {
82+
var regionUri = entry.getValue().getUri();
83+
if (regionUri != null && Strings.CS.removeEnd(regionUri.toString(), "/").equals(cleanedUri)) {
8484
return Optional.of(entry.getKey());
8585
}
8686
}
8787

8888
for (var region : SonarCloudRegion.values()) {
89-
if (removeEnd(region.getProductionUri().toString(), "/").equals(cleanedUri)) {
89+
if (Strings.CS.removeEnd(region.getProductionUri().toString(), "/").equals(cleanedUri)) {
9090
return Optional.of(region);
9191
}
9292
}

backend/core/src/main/java/org/sonarsource/sonarlint/core/embedded/server/RequestHandlerBindingAssistant.java

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,6 @@
2929
import java.util.stream.Collectors;
3030
import javax.annotation.CheckForNull;
3131
import javax.annotation.Nullable;
32-
import org.apache.commons.lang.StringEscapeUtils;
3332
import org.sonarsource.sonarlint.core.BindingCandidatesFinder;
3433
import org.sonarsource.sonarlint.core.BindingSuggestionProvider;
3534
import org.sonarsource.sonarlint.core.SonarQubeClientManager;
@@ -50,6 +49,8 @@
5049
import org.sonarsource.sonarlint.core.rpc.protocol.client.message.MessageType;
5150
import org.sonarsource.sonarlint.core.rpc.protocol.client.message.ShowMessageParams;
5251

52+
import static org.apache.commons.text.StringEscapeUtils.escapeHtml4;
53+
5354
public class RequestHandlerBindingAssistant {
5455

5556
private static final SonarLintLogger LOG = SonarLintLogger.get();
@@ -220,7 +221,7 @@ NewBinding assistBinding(String connectionId, boolean isSonarCloud, String proje
220221
var configScopeCandidates = bindingCandidatesFinder.findConfigScopesToBind(connectionId, projectKey, cancelMonitor);
221222
// For now, we decided to only support automatic binding if there is only one clear candidate
222223
if (configScopeCandidates.size() != 1) {
223-
client.noBindingSuggestionFound(new NoBindingSuggestionFoundParams(StringEscapeUtils.escapeHtml(projectKey), isSonarCloud));
224+
client.noBindingSuggestionFound(new NoBindingSuggestionFoundParams(escapeHtml4(projectKey), isSonarCloud));
224225
return new NewBinding(connectionId, null);
225226
}
226227
var bindableConfig = configScopeCandidates.iterator().next();

backend/core/src/main/java/org/sonarsource/sonarlint/core/embedded/server/RequestHandlerUtils.java

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -19,11 +19,10 @@
1919
*/
2020
package org.sonarsource.sonarlint.core.embedded.server;
2121

22+
import org.apache.commons.lang3.Strings;
2223
import org.apache.hc.core5.http.ClassicHttpRequest;
2324
import org.apache.hc.core5.http.ProtocolException;
2425

25-
import static org.apache.commons.lang3.StringUtils.removeEnd;
26-
2726
public class RequestHandlerUtils {
2827

2928
private RequestHandlerUtils() {
@@ -33,6 +32,6 @@ private RequestHandlerUtils() {
3332
public static String getServerUrlForSonarCloud(ClassicHttpRequest request) throws ProtocolException {
3433
var originUrl = request.getHeader("Origin").getValue();
3534
// Since the 'isSonarCloud' check passed, we are sure that the region will be there
36-
return removeEnd(originUrl, "/");
35+
return Strings.CS.removeEnd(originUrl, "/");
3736
}
3837
}

backend/core/src/main/java/org/sonarsource/sonarlint/core/embedded/server/ShowFixSuggestionRequestHandler.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,6 @@
3131
import java.util.List;
3232
import java.util.Optional;
3333
import javax.annotation.Nullable;
34-
import org.apache.commons.lang.StringEscapeUtils;
3534
import org.apache.hc.core5.http.ClassicHttpRequest;
3635
import org.apache.hc.core5.http.ClassicHttpResponse;
3736
import org.apache.hc.core5.http.HttpException;
@@ -65,6 +64,7 @@
6564

6665
import static org.apache.commons.lang3.StringUtils.isNotBlank;
6766
import static org.apache.commons.lang3.StringUtils.isNotEmpty;
67+
import static org.apache.commons.text.StringEscapeUtils.escapeHtml4;
6868
import static org.sonarsource.sonarlint.core.commons.util.StringUtils.sanitizeAgainstRTLO;
6969
import static org.sonarsource.sonarlint.core.embedded.server.RequestHandlerUtils.getServerUrlForSonarCloud;
7070

@@ -303,7 +303,7 @@ public record FixSuggestionPayload(FileEditPayload fileEdit, String suggestionId
303303
public FixSuggestionPayload(FileEditPayload fileEdit, String suggestionId, String explanation) {
304304
this.fileEdit = fileEdit;
305305
this.suggestionId = suggestionId;
306-
this.explanation = StringEscapeUtils.escapeHtml(explanation);
306+
this.explanation = escapeHtml4(explanation);
307307
}
308308

309309
public boolean isValid() {

backend/core/src/main/java/org/sonarsource/sonarlint/core/file/WindowsShortcutUtils.java

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -24,9 +24,10 @@
2424
import java.io.IOException;
2525
import java.net.URI;
2626
import java.util.Arrays;
27-
import org.apache.commons.lang.ArrayUtils;
2827
import org.sonarsource.sonarlint.core.commons.log.SonarLintLogger;
2928

29+
import static org.apache.commons.lang3.ArrayUtils.reverse;
30+
3031
public class WindowsShortcutUtils {
3132
// Based on Windows specification the magic number is 0x0000004C that must be tested with both big and little endian
3233
// as it might differ based on the architecture / OS.
@@ -66,7 +67,7 @@ public static boolean isWindowsShortcut(URI uri) {
6667
}
6768

6869
// Check little endian
69-
ArrayUtils.reverse(magicNumber);
70+
reverse(magicNumber);
7071
return Arrays.equals(WINDOWS_SHORTCUT_MAGIC_NUMBER, magicNumber);
7172
} catch (IOException err) {
7273
SonarLintLogger.get().debug("Cannot check whether '" + uri + "' is a Windows shortcut, assuming it is not.");

backend/core/src/main/java/org/sonarsource/sonarlint/core/repository/connection/AbstractConnectionConfiguration.java

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -22,11 +22,10 @@
2222
import java.net.URI;
2323
import java.net.URISyntaxException;
2424
import java.util.Objects;
25+
import org.apache.commons.lang3.Strings;
2526
import org.sonarsource.sonarlint.core.commons.ConnectionKind;
2627
import org.sonarsource.sonarlint.core.serverapi.EndpointParams;
2728

28-
import static org.apache.commons.lang.StringUtils.removeEnd;
29-
3029
public abstract class AbstractConnectionConfiguration {
3130

3231
/**
@@ -42,7 +41,7 @@ protected AbstractConnectionConfiguration(String connectionId, ConnectionKind ki
4241
this.connectionId = connectionId;
4342
this.kind = kind;
4443
this.disableNotifications = disableNotifications;
45-
this.url = removeEnd(url, "/");
44+
this.url = Strings.CS.removeEnd(url, "/");
4645
}
4746

4847
public String getConnectionId() {
@@ -67,8 +66,8 @@ public boolean isSameServerUrl(String otherUrl) {
6766
URI myUri;
6867
URI otherUri;
6968
try {
70-
myUri = new URI(removeEnd(url, "/"));
71-
otherUri = new URI(removeEnd(otherUrl, "/"));
69+
myUri = new URI(Strings.CS.removeEnd(url, "/"));
70+
otherUri = new URI(Strings.CS.removeEnd(otherUrl, "/"));
7271
} catch (URISyntaxException e) {
7372
return false;
7473
}

0 commit comments

Comments
 (0)