Skip to content

Commit efd7796

Browse files
authored
GEODE-10546: Address CVE-2025-48924 in Apache Commons Lang3 (#7976)
* GEODE-10546: Address CVE-2025-48924 in Apache Commons Lang3 - Upgrade commons-lang3 from 3.12.0 to 3.18.0 - Replace StringUtils.startsWith with String.startsWith (with null check) - Replace StringUtils.containsIgnoreCase with toLowerCase().contains() - Replace StringUtils.removeStart with ternary operator pattern - Replace StringUtils.equals with Objects.equals - Replace LineIterator.nextLine() with LineIterator.next() - Fix Mockito compatibility with MutableInt in commons-lang3 3.18.0 - All quality checks pass (japicmp, javadoc, spotlessCheck, rat, checkPom, pmdMain) - ConnectCommandTest: 24 tests now pass (fixed NullPointerException) * GEODE-10546: Upgrade commons-io to 2.18.0 (merge with support/1.15)
1 parent 7c8c388 commit efd7796

10 files changed

Lines changed: 18 additions & 18 deletions

File tree

build-tools/geode-dependency-management/src/main/groovy/org/apache/geode/gradle/plugins/DependencyConstraints.groovy

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@ class DependencyConstraints {
3434
// Some of these are referenced below as well
3535
deps.put("antlr.version", "2.7.7")
3636
deps.put("commons-io.version", "2.18.0")
37-
deps.put("commons-lang3.version", "3.12.0")
37+
deps.put("commons-lang3.version", "3.18.0")
3838
deps.put("commons-validator.version", "1.7")
3939
deps.put("fastutil.version", "8.5.8")
4040
deps.put("javax.transaction-api.version", "1.3")

geode-assembly/src/acceptanceTest/java/org/apache/geode/management/internal/cli/commands/StartServerCommandAcceptanceTest.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -103,7 +103,7 @@ public void parametersOverrideCacheXml() throws IOException {
103103
Boolean configurationLineFound = Boolean.FALSE;
104104
LineIterator lineIterator = FileUtils.lineIterator(logFile.toFile());
105105
while (lineIterator.hasNext()) {
106-
String line = lineIterator.nextLine();
106+
String line = lineIterator.next();
107107
if (line.contains("CacheServer Configuration:")) {
108108
configurationLineFound = Boolean.TRUE;
109109
assertThat(line).contains("max-threads=100");
@@ -152,7 +152,7 @@ public void usesClusterConfigurationIfEnabled() throws IOException {
152152
boolean configurationLineFound = false;
153153
LineIterator lineIterator = FileUtils.lineIterator(logFile.toFile());
154154
while (lineIterator.hasNext()) {
155-
String line = lineIterator.nextLine();
155+
String line = lineIterator.next();
156156
if (line.contains("CacheServer Configuration:")) {
157157
configurationLineFound = true;
158158
assertThat(line).contains("max-threads=50");

geode-core/src/test/java/org/apache/geode/internal/cache/tier/sockets/ServerConnectionTest.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -307,7 +307,7 @@ public void handleTerminationWithUnregisterClientShouldNullClientAuths() {
307307
ClientUserAuths clientUserAuths = mock(ClientUserAuths.class);
308308
ServerConnection spy = spy(serverConnection);
309309
Map<ServerSideHandshake, MutableInt> cleanupTable = mock(Map.class);
310-
when(cleanupTable.get(any())).thenReturn(mock(MutableInt.class));
310+
when(cleanupTable.get(any())).thenReturn(new MutableInt(0));
311311
doReturn(cleanupTable).when(clientHealthMonitor).getCleanupTable();
312312
doReturn(new HashMap<>()).when(clientHealthMonitor).getCleanupProxyIdTable();
313313
spy.setClientUserAuths(clientUserAuths);

geode-gfsh/src/main/java/org/apache/geode/management/internal/cli/commands/ConnectCommand.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -123,7 +123,7 @@ public ResultModel connect(
123123
.createInfo("Already connected to: " + getGfsh().getOperationInvoker().toString());
124124
}
125125

126-
if (StringUtils.startsWith(url, "https")) {
126+
if (url != null && url.startsWith("https")) {
127127
useSsl = true;
128128
}
129129

geode-gfsh/src/main/java/org/apache/geode/management/internal/cli/commands/CreateIndexCommand.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,6 @@
2424
import java.util.List;
2525
import java.util.Set;
2626

27-
import org.apache.commons.lang3.StringUtils;
2827
import org.springframework.shell.core.annotation.CliCommand;
2928
import org.springframework.shell.core.annotation.CliOption;
3029

@@ -169,7 +168,8 @@ public ResultModel createIndex(@CliOption(key = CliStrings.CREATE_INDEX__NAME, m
169168
// returned here should not have "."
170169
String getValidRegionName(String regionPath) {
171170
String regionName = regionPath.trim().split(" ")[0];
172-
regionName = StringUtils.removeStart(regionName, SEPARATOR);
171+
regionName =
172+
regionName.startsWith(SEPARATOR) ? regionName.substring(SEPARATOR.length()) : regionName;
173173
if (regionName.contains(".")) {
174174
regionName = regionName.substring(0, regionName.indexOf('.'));
175175
}

geode-gfsh/src/main/java/org/apache/geode/management/internal/cli/commands/QueryCommand.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -84,8 +84,8 @@ DataCommandResult select(String query, DistributedMember targetMember) {
8484

8585
boolean limitAdded = false;
8686

87-
if (!StringUtils.containsIgnoreCase(query, " limit")
88-
&& !StringUtils.containsIgnoreCase(query, " count(")) {
87+
if (!query.toLowerCase().contains(" limit")
88+
&& !query.toLowerCase().contains(" count(")) {
8989
query = query + " limit " + CommandExecutionContext.getShellFetchSize();
9090
limitAdded = true;
9191
}

geode-gfsh/src/main/java/org/apache/geode/management/internal/cli/domain/FixedPartitionAttributesInfo.java

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -15,8 +15,7 @@
1515
package org.apache.geode.management.internal.cli.domain;
1616

1717
import java.io.Serializable;
18-
19-
import org.apache.commons.lang3.StringUtils;
18+
import java.util.Objects;
2019

2120
import org.apache.geode.cache.FixedPartitionAttributes;
2221

@@ -37,7 +36,7 @@ public boolean equals(Object obj) {
3736
if (obj instanceof FixedPartitionAttributesInfo) {
3837
FixedPartitionAttributesInfo fpaInfo = (FixedPartitionAttributesInfo) obj;
3938
return numBuckets == fpaInfo.getNumBuckets()
40-
&& StringUtils.equals(partitionName, fpaInfo.getPartitionName())
39+
&& Objects.equals(partitionName, fpaInfo.getPartitionName())
4140
&& isPrimary == fpaInfo.isPrimary();
4241

4342
} else {

geode-gfsh/src/main/java/org/apache/geode/management/internal/cli/domain/PartitionAttributesInfo.java

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -20,8 +20,7 @@
2020
import java.util.Iterator;
2121
import java.util.List;
2222
import java.util.Map;
23-
24-
import org.apache.commons.lang3.StringUtils;
23+
import java.util.Objects;
2524

2625
import org.apache.geode.cache.FixedPartitionAttributes;
2726
import org.apache.geode.cache.PartitionAttributes;
@@ -152,9 +151,9 @@ public List<FixedPartitionAttributesInfo> getFixedPartitionAttributesInfo() {
152151
public boolean equals(Object obj) {
153152
if (obj instanceof PartitionAttributesInfo) {
154153
PartitionAttributesInfo paInfo = (PartitionAttributesInfo) obj;
155-
return StringUtils.equals(getColocatedWith(), paInfo.getColocatedWith())
154+
return Objects.equals(getColocatedWith(), paInfo.getColocatedWith())
156155
&& getLocalMaxMemory() == paInfo.getLocalMaxMemory()
157-
&& StringUtils.equals(getPartitionResolverName(), paInfo.getPartitionResolverName())
156+
&& Objects.equals(getPartitionResolverName(), paInfo.getPartitionResolverName())
158157
&& getRecoveryDelay() == paInfo.getRecoveryDelay()
159158
&& getRedundantCopies() == paInfo.getRedundantCopies()
160159
&& getStartupRecoveryDelay() == paInfo.getStartupRecoveryDelay()

geode-gfsh/src/main/java/org/apache/geode/management/internal/cli/domain/RegionAttributesInfo.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@
2121
import java.util.HashSet;
2222
import java.util.List;
2323
import java.util.Map;
24+
import java.util.Objects;
2425
import java.util.Set;
2526

2627
import org.apache.commons.lang3.StringUtils;
@@ -364,7 +365,7 @@ public Map<String, String> getNonDefaultAttributes() {
364365
Boolean.toString(cloningEnabled));
365366
}
366367

367-
if (!StringUtils.equals(RegionAttributesDefault.COMPRESSOR_CLASS_NAME, compressorClassName)) {
368+
if (!Objects.equals(RegionAttributesDefault.COMPRESSOR_CLASS_NAME, compressorClassName)) {
368369
nonDefaultAttributes.put(RegionAttributesNames.COMPRESSOR, compressorClassName);
369370
}
370371

geode-management/src/main/java/org/apache/geode/management/configuration/Index.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -88,7 +88,8 @@ public String getRegionName() {
8888
}
8989

9090
String regionName = regionPath.trim().split(" ")[0];
91-
regionName = StringUtils.removeStart(regionName, SEPARATOR);
91+
regionName =
92+
regionName.startsWith(SEPARATOR) ? regionName.substring(SEPARATOR.length()) : regionName;
9293
if (regionName.contains(".")) {
9394
regionName = regionName.substring(0, regionName.indexOf('.'));
9495
}

0 commit comments

Comments
 (0)