This is an automated email from the ASF dual-hosted git repository.

jinwoo pushed a commit to branch support/1.15
in repository https://gitbox.apache.org/repos/asf/geode.git


The following commit(s) were added to refs/heads/support/1.15 by this push:
     new efd7796f6b GEODE-10546: Address CVE-2025-48924 in Apache Commons Lang3 
(#7976)
efd7796f6b is described below

commit efd7796f6bbf54d4e639f779587e47a4116a6298
Author: Jinwoo Hwang <[email protected]>
AuthorDate: Mon Mar 16 05:51:46 2026 -0400

    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)
---
 .../org/apache/geode/gradle/plugins/DependencyConstraints.groovy   | 2 +-
 .../internal/cli/commands/StartServerCommandAcceptanceTest.java    | 4 ++--
 .../geode/internal/cache/tier/sockets/ServerConnectionTest.java    | 2 +-
 .../geode/management/internal/cli/commands/ConnectCommand.java     | 2 +-
 .../geode/management/internal/cli/commands/CreateIndexCommand.java | 4 ++--
 .../geode/management/internal/cli/commands/QueryCommand.java       | 4 ++--
 .../internal/cli/domain/FixedPartitionAttributesInfo.java          | 5 ++---
 .../management/internal/cli/domain/PartitionAttributesInfo.java    | 7 +++----
 .../geode/management/internal/cli/domain/RegionAttributesInfo.java | 3 ++-
 .../main/java/org/apache/geode/management/configuration/Index.java | 3 ++-
 10 files changed, 18 insertions(+), 18 deletions(-)

diff --git 
a/build-tools/geode-dependency-management/src/main/groovy/org/apache/geode/gradle/plugins/DependencyConstraints.groovy
 
b/build-tools/geode-dependency-management/src/main/groovy/org/apache/geode/gradle/plugins/DependencyConstraints.groovy
index 831d0ec12e..7c824f5190 100644
--- 
a/build-tools/geode-dependency-management/src/main/groovy/org/apache/geode/gradle/plugins/DependencyConstraints.groovy
+++ 
b/build-tools/geode-dependency-management/src/main/groovy/org/apache/geode/gradle/plugins/DependencyConstraints.groovy
@@ -34,7 +34,7 @@ class DependencyConstraints {
     // Some of these are referenced below as well
     deps.put("antlr.version", "2.7.7")
     deps.put("commons-io.version", "2.18.0")
-    deps.put("commons-lang3.version", "3.12.0")
+    deps.put("commons-lang3.version", "3.18.0")
     deps.put("commons-validator.version", "1.7")
     deps.put("fastutil.version", "8.5.8")
     deps.put("javax.transaction-api.version", "1.3")
diff --git 
a/geode-assembly/src/acceptanceTest/java/org/apache/geode/management/internal/cli/commands/StartServerCommandAcceptanceTest.java
 
b/geode-assembly/src/acceptanceTest/java/org/apache/geode/management/internal/cli/commands/StartServerCommandAcceptanceTest.java
index fb9a665bcf..828655420a 100644
--- 
a/geode-assembly/src/acceptanceTest/java/org/apache/geode/management/internal/cli/commands/StartServerCommandAcceptanceTest.java
+++ 
b/geode-assembly/src/acceptanceTest/java/org/apache/geode/management/internal/cli/commands/StartServerCommandAcceptanceTest.java
@@ -103,7 +103,7 @@ public class StartServerCommandAcceptanceTest {
     Boolean configurationLineFound = Boolean.FALSE;
     LineIterator lineIterator = FileUtils.lineIterator(logFile.toFile());
     while (lineIterator.hasNext()) {
-      String line = lineIterator.nextLine();
+      String line = lineIterator.next();
       if (line.contains("CacheServer Configuration:")) {
         configurationLineFound = Boolean.TRUE;
         assertThat(line).contains("max-threads=100");
@@ -152,7 +152,7 @@ public class StartServerCommandAcceptanceTest {
     boolean configurationLineFound = false;
     LineIterator lineIterator = FileUtils.lineIterator(logFile.toFile());
     while (lineIterator.hasNext()) {
-      String line = lineIterator.nextLine();
+      String line = lineIterator.next();
       if (line.contains("CacheServer Configuration:")) {
         configurationLineFound = true;
         assertThat(line).contains("max-threads=50");
diff --git 
a/geode-core/src/test/java/org/apache/geode/internal/cache/tier/sockets/ServerConnectionTest.java
 
b/geode-core/src/test/java/org/apache/geode/internal/cache/tier/sockets/ServerConnectionTest.java
index e32a031a3c..8dadc5d481 100644
--- 
a/geode-core/src/test/java/org/apache/geode/internal/cache/tier/sockets/ServerConnectionTest.java
+++ 
b/geode-core/src/test/java/org/apache/geode/internal/cache/tier/sockets/ServerConnectionTest.java
@@ -307,7 +307,7 @@ public class ServerConnectionTest {
     ClientUserAuths clientUserAuths = mock(ClientUserAuths.class);
     ServerConnection spy = spy(serverConnection);
     Map<ServerSideHandshake, MutableInt> cleanupTable = mock(Map.class);
-    when(cleanupTable.get(any())).thenReturn(mock(MutableInt.class));
+    when(cleanupTable.get(any())).thenReturn(new MutableInt(0));
     doReturn(cleanupTable).when(clientHealthMonitor).getCleanupTable();
     doReturn(new 
HashMap<>()).when(clientHealthMonitor).getCleanupProxyIdTable();
     spy.setClientUserAuths(clientUserAuths);
diff --git 
a/geode-gfsh/src/main/java/org/apache/geode/management/internal/cli/commands/ConnectCommand.java
 
b/geode-gfsh/src/main/java/org/apache/geode/management/internal/cli/commands/ConnectCommand.java
index 27ed6e465a..8a13f9f665 100644
--- 
a/geode-gfsh/src/main/java/org/apache/geode/management/internal/cli/commands/ConnectCommand.java
+++ 
b/geode-gfsh/src/main/java/org/apache/geode/management/internal/cli/commands/ConnectCommand.java
@@ -123,7 +123,7 @@ public class ConnectCommand extends OfflineGfshCommand {
           .createInfo("Already connected to: " + 
getGfsh().getOperationInvoker().toString());
     }
 
-    if (StringUtils.startsWith(url, "https")) {
+    if (url != null && url.startsWith("https")) {
       useSsl = true;
     }
 
diff --git 
a/geode-gfsh/src/main/java/org/apache/geode/management/internal/cli/commands/CreateIndexCommand.java
 
b/geode-gfsh/src/main/java/org/apache/geode/management/internal/cli/commands/CreateIndexCommand.java
index d1f4f1892a..4a0b1c499e 100644
--- 
a/geode-gfsh/src/main/java/org/apache/geode/management/internal/cli/commands/CreateIndexCommand.java
+++ 
b/geode-gfsh/src/main/java/org/apache/geode/management/internal/cli/commands/CreateIndexCommand.java
@@ -24,7 +24,6 @@ import java.util.HashSet;
 import java.util.List;
 import java.util.Set;
 
-import org.apache.commons.lang3.StringUtils;
 import org.springframework.shell.core.annotation.CliCommand;
 import org.springframework.shell.core.annotation.CliOption;
 
@@ -169,7 +168,8 @@ public class CreateIndexCommand extends GfshCommand {
   // returned here should not have "."
   String getValidRegionName(String regionPath) {
     String regionName = regionPath.trim().split(" ")[0];
-    regionName = StringUtils.removeStart(regionName, SEPARATOR);
+    regionName =
+        regionName.startsWith(SEPARATOR) ? 
regionName.substring(SEPARATOR.length()) : regionName;
     if (regionName.contains(".")) {
       regionName = regionName.substring(0, regionName.indexOf('.'));
     }
diff --git 
a/geode-gfsh/src/main/java/org/apache/geode/management/internal/cli/commands/QueryCommand.java
 
b/geode-gfsh/src/main/java/org/apache/geode/management/internal/cli/commands/QueryCommand.java
index ccd7d3c833..da610a5d87 100644
--- 
a/geode-gfsh/src/main/java/org/apache/geode/management/internal/cli/commands/QueryCommand.java
+++ 
b/geode-gfsh/src/main/java/org/apache/geode/management/internal/cli/commands/QueryCommand.java
@@ -84,8 +84,8 @@ public class QueryCommand extends GfshCommand {
 
     boolean limitAdded = false;
 
-    if (!StringUtils.containsIgnoreCase(query, " limit")
-        && !StringUtils.containsIgnoreCase(query, " count(")) {
+    if (!query.toLowerCase().contains(" limit")
+        && !query.toLowerCase().contains(" count(")) {
       query = query + " limit " + CommandExecutionContext.getShellFetchSize();
       limitAdded = true;
     }
diff --git 
a/geode-gfsh/src/main/java/org/apache/geode/management/internal/cli/domain/FixedPartitionAttributesInfo.java
 
b/geode-gfsh/src/main/java/org/apache/geode/management/internal/cli/domain/FixedPartitionAttributesInfo.java
index 06061bacfc..6bf349349e 100644
--- 
a/geode-gfsh/src/main/java/org/apache/geode/management/internal/cli/domain/FixedPartitionAttributesInfo.java
+++ 
b/geode-gfsh/src/main/java/org/apache/geode/management/internal/cli/domain/FixedPartitionAttributesInfo.java
@@ -15,8 +15,7 @@
 package org.apache.geode.management.internal.cli.domain;
 
 import java.io.Serializable;
-
-import org.apache.commons.lang3.StringUtils;
+import java.util.Objects;
 
 import org.apache.geode.cache.FixedPartitionAttributes;
 
@@ -37,7 +36,7 @@ public class FixedPartitionAttributesInfo implements 
Serializable {
     if (obj instanceof FixedPartitionAttributesInfo) {
       FixedPartitionAttributesInfo fpaInfo = (FixedPartitionAttributesInfo) 
obj;
       return numBuckets == fpaInfo.getNumBuckets()
-          && StringUtils.equals(partitionName, fpaInfo.getPartitionName())
+          && Objects.equals(partitionName, fpaInfo.getPartitionName())
           && isPrimary == fpaInfo.isPrimary();
 
     } else {
diff --git 
a/geode-gfsh/src/main/java/org/apache/geode/management/internal/cli/domain/PartitionAttributesInfo.java
 
b/geode-gfsh/src/main/java/org/apache/geode/management/internal/cli/domain/PartitionAttributesInfo.java
index c2bcfe7f69..c17f50f519 100644
--- 
a/geode-gfsh/src/main/java/org/apache/geode/management/internal/cli/domain/PartitionAttributesInfo.java
+++ 
b/geode-gfsh/src/main/java/org/apache/geode/management/internal/cli/domain/PartitionAttributesInfo.java
@@ -20,8 +20,7 @@ import java.util.HashMap;
 import java.util.Iterator;
 import java.util.List;
 import java.util.Map;
-
-import org.apache.commons.lang3.StringUtils;
+import java.util.Objects;
 
 import org.apache.geode.cache.FixedPartitionAttributes;
 import org.apache.geode.cache.PartitionAttributes;
@@ -152,9 +151,9 @@ public class PartitionAttributesInfo implements 
Serializable {
   public boolean equals(Object obj) {
     if (obj instanceof PartitionAttributesInfo) {
       PartitionAttributesInfo paInfo = (PartitionAttributesInfo) obj;
-      return StringUtils.equals(getColocatedWith(), paInfo.getColocatedWith())
+      return Objects.equals(getColocatedWith(), paInfo.getColocatedWith())
           && getLocalMaxMemory() == paInfo.getLocalMaxMemory()
-          && StringUtils.equals(getPartitionResolverName(), 
paInfo.getPartitionResolverName())
+          && Objects.equals(getPartitionResolverName(), 
paInfo.getPartitionResolverName())
           && getRecoveryDelay() == paInfo.getRecoveryDelay()
           && getRedundantCopies() == paInfo.getRedundantCopies()
           && getStartupRecoveryDelay() == paInfo.getStartupRecoveryDelay()
diff --git 
a/geode-gfsh/src/main/java/org/apache/geode/management/internal/cli/domain/RegionAttributesInfo.java
 
b/geode-gfsh/src/main/java/org/apache/geode/management/internal/cli/domain/RegionAttributesInfo.java
index 6adf2ecaea..05d77c238c 100644
--- 
a/geode-gfsh/src/main/java/org/apache/geode/management/internal/cli/domain/RegionAttributesInfo.java
+++ 
b/geode-gfsh/src/main/java/org/apache/geode/management/internal/cli/domain/RegionAttributesInfo.java
@@ -21,6 +21,7 @@ import java.util.HashMap;
 import java.util.HashSet;
 import java.util.List;
 import java.util.Map;
+import java.util.Objects;
 import java.util.Set;
 
 import org.apache.commons.lang3.StringUtils;
@@ -364,7 +365,7 @@ public class RegionAttributesInfo implements Serializable {
           Boolean.toString(cloningEnabled));
     }
 
-    if (!StringUtils.equals(RegionAttributesDefault.COMPRESSOR_CLASS_NAME, 
compressorClassName)) {
+    if (!Objects.equals(RegionAttributesDefault.COMPRESSOR_CLASS_NAME, 
compressorClassName)) {
       nonDefaultAttributes.put(RegionAttributesNames.COMPRESSOR, 
compressorClassName);
     }
 
diff --git 
a/geode-management/src/main/java/org/apache/geode/management/configuration/Index.java
 
b/geode-management/src/main/java/org/apache/geode/management/configuration/Index.java
index 2e1c684916..03372f9168 100644
--- 
a/geode-management/src/main/java/org/apache/geode/management/configuration/Index.java
+++ 
b/geode-management/src/main/java/org/apache/geode/management/configuration/Index.java
@@ -88,7 +88,8 @@ public class Index extends AbstractConfiguration<IndexInfo> 
implements RegionSco
     }
 
     String regionName = regionPath.trim().split(" ")[0];
-    regionName = StringUtils.removeStart(regionName, SEPARATOR);
+    regionName =
+        regionName.startsWith(SEPARATOR) ? 
regionName.substring(SEPARATOR.length()) : regionName;
     if (regionName.contains(".")) {
       regionName = regionName.substring(0, regionName.indexOf('.'));
     }

Reply via email to