From 7883fb9a24502f758f0471170135bf4a3a8b6324 Mon Sep 17 00:00:00 2001
From: Valery Kharseko <vharseko@3a-systems.ru>
Date: Fri, 24 Jul 2026 15:05:40 +0000
Subject: [PATCH] Fix java/implicit-cast-in-compound-assignment CodeQL alerts (#759)

---
 opendj-server-legacy/src/main/java/org/opends/guitools/controlpanel/datamodel/DatabaseMonitoringTableModel.java |   11 +++++++++--
 opendj-server-legacy/src/main/java/org/opends/server/backends/pluggable/EntryIDSet.java                         |   11 +++++++----
 2 files changed, 16 insertions(+), 6 deletions(-)

diff --git a/opendj-server-legacy/src/main/java/org/opends/guitools/controlpanel/datamodel/DatabaseMonitoringTableModel.java b/opendj-server-legacy/src/main/java/org/opends/guitools/controlpanel/datamodel/DatabaseMonitoringTableModel.java
index 786fb62..7111c26 100644
--- a/opendj-server-legacy/src/main/java/org/opends/guitools/controlpanel/datamodel/DatabaseMonitoringTableModel.java
+++ b/opendj-server-legacy/src/main/java/org/opends/guitools/controlpanel/datamodel/DatabaseMonitoringTableModel.java
@@ -13,6 +13,7 @@
  *
  * Copyright 2009 Sun Microsystems, Inc.
  * Portions Copyright 2014-2016 ForgeRock AS.
+ * Portions Copyrighted 2026 3A Systems, LLC.
  */
 package org.opends.guitools.controlpanel.datamodel;
 
@@ -231,7 +232,9 @@
     {
       boolean valueSet = false;
       boolean notImplemented = false;
-      long totalValue = 0;
+      // Accumulate in a double so that decimal column values are not silently
+      // truncated when added to the running total.
+      double totalValue = 0;
       for (String[] l : dataArray)
       {
         String value = l[i];
@@ -261,7 +264,11 @@
       }
       else if (valueSet)
       {
-        line[i] = String.valueOf(totalValue);
+        // Render whole totals as integers (as before) and keep the fractional
+        // part only when the summed column actually carried decimal values.
+        line[i] = totalValue == Math.rint(totalValue) && !Double.isInfinite(totalValue)
+            ? String.valueOf((long) totalValue)
+            : String.valueOf(totalValue);
       }
       else
       {
diff --git a/opendj-server-legacy/src/main/java/org/opends/server/backends/pluggable/EntryIDSet.java b/opendj-server-legacy/src/main/java/org/opends/server/backends/pluggable/EntryIDSet.java
index 3066154..600855e 100644
--- a/opendj-server-legacy/src/main/java/org/opends/server/backends/pluggable/EntryIDSet.java
+++ b/opendj-server-legacy/src/main/java/org/opends/server/backends/pluggable/EntryIDSet.java
@@ -13,6 +13,7 @@
  *
  * Copyright 2006-2008 Sun Microsystems, Inc.
  * Portions Copyright 2014-2016 ForgeRock AS.
+ * Portions Copyrighted 2026 3A Systems, LLC.
  */
 package org.opends.server.backends.pluggable;
 
@@ -668,7 +669,7 @@
   {
     checkNotNull(sets, "sets must not be null");
 
-    int count = 0;
+    long count = 0;
 
     boolean containsUndefinedSet = false;
     for (EntryIDSet l : sets)
@@ -684,13 +685,15 @@
       count += l.size();
     }
 
-    if (containsUndefinedSet)
+    if (containsUndefinedSet || count > Integer.MAX_VALUE)
     {
+      // Either at least one set was undefined, or the combined number of IDs
+      // cannot be represented by a single array: fall back to an undefined set.
       return newUndefinedSet();
     }
 
     boolean needSort = false;
-    long[] n = new long[count];
+    long[] n = new long[(int) count];
     int pos = 0;
     for (EntryIDSet l : sets)
     {
@@ -698,7 +701,7 @@
       {
         needSort |= pos > 0 && l.iterator().next().longValue() < n[pos - 1];
         System.arraycopy(l.getIDs(), 0, n, pos, l.getIDs().length);
-        pos += l.size();
+        pos += (int) l.size();
       }
     }
     if (needSort)

--
Gitblit v1.10.0