From 6d9b55b0014ac0b9b559fec121325587afcd5bce Mon Sep 17 00:00:00 2001 From: Valera V Harseko Date: Fri, 18 Sep 2026 14:26:42 +0300 Subject: [PATCH] Fix CodeQL unused-format-argument and boxed-variable warnings - Match SLF4J placeholders to their arguments in ManagedObjectSet, ReverseRelationshipValidator, UpdateManagerImpl, MessagingService, RepoJobStore, Activator, RouterConfig and ScriptedRequestHandler - FieldStorageSchemeImpl: stop passing the stored password hash to the logger at all instead of adding a placeholder for it - Use primitives for locals that are never null in DatabaseInfoResourceProvider, ConnectorUtil, GenericTableHandler, TableQueries, CustomCommandScope and JsonUtil Resolves CodeQL alerts #452-#468, #646-#650, #653. --- .../forgerock/openidm/managed/ManagedObjectSet.java | 2 +- .../managed/ReverseRelationshipValidator.java | 3 ++- .../info/health/DatabaseInfoResourceProvider.java | 2 +- .../maintenance/upgrade/UpdateManagerImpl.java | 4 ++-- .../openidm/messaging/MessagingService.java | 4 ++-- .../provisioner/openicf/commons/ConnectorUtil.java | 4 ++-- .../forgerock/openidm/quartz/impl/RepoJobStore.java | 5 +++-- .../forgerock/openidm/repo/jdbc/impl/Activator.java | 13 +++++++------ .../openidm/repo/jdbc/impl/GenericTableHandler.java | 2 +- .../openidm/repo/jdbc/impl/query/TableQueries.java | 3 ++- .../forgerock/openidm/router/impl/RouterConfig.java | 4 ++-- .../openidm/script/ScriptedRequestHandler.java | 2 +- .../forgerock/openidm/shell/CustomCommandScope.java | 6 +++--- .../openidm/crypto/FieldStorageSchemeImpl.java | 7 ++++--- .../java/org/forgerock/openidm/util/JsonUtil.java | 7 ++++--- 15 files changed, 37 insertions(+), 31 deletions(-) diff --git a/openidm-core/src/main/java/org/forgerock/openidm/managed/ManagedObjectSet.java b/openidm-core/src/main/java/org/forgerock/openidm/managed/ManagedObjectSet.java index 5b392fcab5..ca97453d7c 100644 --- a/openidm-core/src/main/java/org/forgerock/openidm/managed/ManagedObjectSet.java +++ b/openidm-core/src/main/java/org/forgerock/openidm/managed/ManagedObjectSet.java @@ -1405,7 +1405,7 @@ public Promise actionInstance(Context context scriptBindings.put("object", currentResource.getContent()); Object result = execCustomAction(managedContext, request.getAction(), value, scriptBindings); - logger.debug("Result returned by executing the script: ", result); + logger.debug("Result returned by executing the script: {}", result); // re-read the object for the response using the appropriate connection given our calling context final Connection connection = ContextUtil.isExternal(context) diff --git a/openidm-core/src/main/java/org/forgerock/openidm/managed/ReverseRelationshipValidator.java b/openidm-core/src/main/java/org/forgerock/openidm/managed/ReverseRelationshipValidator.java index c76f20c31c..4e66fa5e90 100644 --- a/openidm-core/src/main/java/org/forgerock/openidm/managed/ReverseRelationshipValidator.java +++ b/openidm-core/src/main/java/org/forgerock/openidm/managed/ReverseRelationshipValidator.java @@ -12,6 +12,7 @@  * information: "Portions copyright [year] [name of copyright owner]".  *  * Copyright 2015-2016 ForgeRock AS. + * Portions Copyright 2026 3A Systems, LLC.  */ package org.forgerock.openidm.managed; @@ -225,7 +226,7 @@ private Collection readRelationshipEndpointEdges(Context conte final String vertex1FieldName = relationshipPropertyName; final String vertex2Id = relationshipField.get(REFERENCE_ID).asString(); final String vertex2FieldName = relationshipReversePropertyName; - logger.debug("Going to query for relationship-defining edge between vertices <{0},{1}> and <{2},{3}>." + logger.debug("Going to query for relationship-defining edge between vertices <{},{}> and <{},{}>." , vertex1Id, vertex1FieldName, vertex2Id, vertex2FieldName); final QueryRequest edgeQueryRequest = Requests.newQueryRequest(REPO_RESOURCE_PATH) .setQueryId(EDGE_QUERY_ID) diff --git a/openidm-infoservice/src/main/java/org/forgerock/openidm/info/health/DatabaseInfoResourceProvider.java b/openidm-infoservice/src/main/java/org/forgerock/openidm/info/health/DatabaseInfoResourceProvider.java index 4fa9784c57..4b4b2e7b5a 100644 --- a/openidm-infoservice/src/main/java/org/forgerock/openidm/info/health/DatabaseInfoResourceProvider.java +++ b/openidm-infoservice/src/main/java/org/forgerock/openidm/info/health/DatabaseInfoResourceProvider.java @@ -73,7 +73,7 @@ public class DatabaseInfoResourceProvider extends AbstractInfoResourceProvider { @Override public Promise readInstance(Context context, ReadRequest request) { - Boolean enabled = Boolean.parseBoolean( + boolean enabled = Boolean.parseBoolean( IdentityServer.getInstance().getProperty("openidm.bonecp.statistics.enabled", "false")); if (!enabled) { return new ServiceUnavailableException("BoneCP statistics mbean not enabled").asPromise(); diff --git a/openidm-maintenance/src/main/java/org/forgerock/openidm/maintenance/upgrade/UpdateManagerImpl.java b/openidm-maintenance/src/main/java/org/forgerock/openidm/maintenance/upgrade/UpdateManagerImpl.java index aad9764c97..323302de65 100644 --- a/openidm-maintenance/src/main/java/org/forgerock/openidm/maintenance/upgrade/UpdateManagerImpl.java +++ b/openidm-maintenance/src/main/java/org/forgerock/openidm/maintenance/upgrade/UpdateManagerImpl.java @@ -12,7 +12,7 @@ * information: "Portions copyright [year] [name of copyright owner]". * * Copyright 2015-2016 ForgeRock AS. - * Portions Copyrighted 2024 3A Systems LLC. + * Portions Copyrighted 2024-2026 3A Systems LLC. */ package org.forgerock.openidm.maintenance.upgrade; @@ -191,7 +191,7 @@ void activate(ComponentContext compContext) throws Exception { this.osgiFrameworkService = serviceTracker.getService(); if (osgiFrameworkService != null) { - logger.debug("Obtained OSGiFrameworkService", compContext.getProperties()); + logger.debug("Obtained OSGiFrameworkService with properties {}", compContext.getProperties()); } else { throw new InternalServerErrorException("Cannot instantiate service without OSGiFrameworkService"); } diff --git a/openidm-messaging/src/main/java/org/forgerock/openidm/messaging/MessagingService.java b/openidm-messaging/src/main/java/org/forgerock/openidm/messaging/MessagingService.java index 27083673bf..4eb4673b13 100644 --- a/openidm-messaging/src/main/java/org/forgerock/openidm/messaging/MessagingService.java +++ b/openidm-messaging/src/main/java/org/forgerock/openidm/messaging/MessagingService.java @@ -12,7 +12,7 @@ * information: "Portions copyright [year] [name of copyright owner]". * * Copyright 2016 ForgeRock AS. - * Portions Copyrighted 2024 3A Systems LLC. + * Portions Copyrighted 2024-2026 3A Systems LLC. */ package org.forgerock.openidm.messaging; @@ -240,7 +240,7 @@ public void deactivate(ComponentContext context) { subscriber.unsubscribe(); logger.debug("MessageSubscriber {} has unsubscribed.", subscriber.getName()); } catch (Exception e) { - logger.warn("Failure to unsubscribe MessageSubscriber {}.", subscriber.getName(), subscriber, e); + logger.warn("Failure to unsubscribe MessageSubscriber {}.", subscriber.getName(), e); } } subscribers.clear(); diff --git a/openidm-provisioner-openicf/src/main/java/org/forgerock/openidm/provisioner/openicf/commons/ConnectorUtil.java b/openidm-provisioner-openicf/src/main/java/org/forgerock/openidm/provisioner/openicf/commons/ConnectorUtil.java index 783250c6dd..9ee18bf7ce 100644 --- a/openidm-provisioner-openicf/src/main/java/org/forgerock/openidm/provisioner/openicf/commons/ConnectorUtil.java +++ b/openidm-provisioner-openicf/src/main/java/org/forgerock/openidm/provisioner/openicf/commons/ConnectorUtil.java @@ -1026,8 +1026,8 @@ public static T coercedTypeCasting(Object source, Class clazz) throws Ill } } else if ((targetClazz.equals(Character.class)) || (targetClazz.equals(char.class))) { if (sourceClass == String.class) { - Character v = ((String) source).charAt(0); - result = (T) v; + char v = ((String) source).charAt(0); + result = (T) Character.valueOf(v); coerced = true; } } else if (targetClazz.equals(Character[].class)) { diff --git a/openidm-quartz-fragment/src/main/java/org/forgerock/openidm/quartz/impl/RepoJobStore.java b/openidm-quartz-fragment/src/main/java/org/forgerock/openidm/quartz/impl/RepoJobStore.java index f4424c4d7a..cfa4e0f5de 100644 --- a/openidm-quartz-fragment/src/main/java/org/forgerock/openidm/quartz/impl/RepoJobStore.java +++ b/openidm-quartz-fragment/src/main/java/org/forgerock/openidm/quartz/impl/RepoJobStore.java @@ -12,6 +12,7 @@ * information: "Portions copyright [year] [name of copyright owner]". * * Copyright 2012-2016 ForgeRock AS. + * Portions Copyright 2026 3A Systems, LLC. */ package org.forgerock.openidm.quartz.impl; @@ -1181,10 +1182,10 @@ public void resumeTriggerGroup(SchedulingContext context, String groupName) resumeTrigger(context, triggerName, groupName); } } catch (JsonValueException e) { - logger.warn("Error pausing trigger group", groupName, e); + logger.warn("Error pausing trigger group {}", groupName, e); throw new JobPersistenceException("Error deserializing trigger", e); } catch (Exception e) { - logger.warn("Error pausing trigger group", groupName, e); + logger.warn("Error pausing trigger group {}", groupName, e); throw new JobPersistenceException("Error pausing trigger group", e); } } diff --git a/openidm-repo-jdbc/src/main/java/org/forgerock/openidm/repo/jdbc/impl/Activator.java b/openidm-repo-jdbc/src/main/java/org/forgerock/openidm/repo/jdbc/impl/Activator.java index f61a2f16ac..f29579c768 100644 --- a/openidm-repo-jdbc/src/main/java/org/forgerock/openidm/repo/jdbc/impl/Activator.java +++ b/openidm-repo-jdbc/src/main/java/org/forgerock/openidm/repo/jdbc/impl/Activator.java @@ -20,6 +20,7 @@ * with the fields enclosed by brackets [] replaced by * your own identifying information: * "Portions Copyrighted [year] [name of copyright owner]" + * Portions Copyright 2026 3A Systems, LLC. */ package org.forgerock.openidm.repo.jdbc.impl; @@ -46,12 +47,12 @@ public class Activator implements BundleActivator { final static Logger logger = LoggerFactory.getLogger(Activator.class); public void start(BundleContext context) { - logger.debug("JDBC bundle starting", context); + logger.debug("JDBC bundle starting"); JsonValue repoConfig = ConfigBootstrapHelper.getRepoBootConfig("jdbc", context); if (repoConfig == null) { logger.debug("No JDBC configuration detected"); - logger.debug("JDBC bundle started", context); + logger.debug("JDBC bundle started"); return; } String dataSourcePid = repoConfig.get(JDBCRepoService.CONFIG_USE_DATASOURCE).asString(); @@ -59,7 +60,7 @@ public void start(BundleContext context) { logger.error("JDBC repository configured, but does not specify a datasource to use - " + "the \"" + JDBCRepoService.CONFIG_USE_DATASOURCE + "\" config property is required " + "and must be the of a datasource.jdbc-.json configuration."); - logger.debug("JDBC bundle started", context); + logger.debug("JDBC bundle started"); return; } @@ -67,7 +68,7 @@ public void start(BundleContext context) { if (dataSourceConfig == null) { logger.error("JDBC repository configured, but datasource \"" + dataSourcePid + "\" was not found - " + " must specify or configure a valid datasource for JDBC repository to use."); - logger.debug("JDBC bundle started", context); + logger.debug("JDBC bundle started"); return; } @@ -90,7 +91,7 @@ public void start(BundleContext context) { context.registerService(RepoBootService.class.getName(), bootSvc, prop); logger.info("Registered bootstrap repository service"); - logger.debug("JDBC bundle started", context); + logger.debug("JDBC bundle started"); } /** @@ -120,6 +121,6 @@ private String getDbDirname(JsonValue repoConfig) { } public void stop(BundleContext context) { - logger.debug("JDBC bundle stopped", context); + logger.debug("JDBC bundle stopped"); } } diff --git a/openidm-repo-jdbc/src/main/java/org/forgerock/openidm/repo/jdbc/impl/GenericTableHandler.java b/openidm-repo-jdbc/src/main/java/org/forgerock/openidm/repo/jdbc/impl/GenericTableHandler.java index f847e7e313..d54b1a274c 100644 --- a/openidm-repo-jdbc/src/main/java/org/forgerock/openidm/repo/jdbc/impl/GenericTableHandler.java +++ b/openidm-repo-jdbc/src/main/java/org/forgerock/openidm/repo/jdbc/impl/GenericTableHandler.java @@ -286,7 +286,7 @@ public void create(String fullId, String type, String localId, Map callback, Object... arguments) result.get(QueryResponse.FIELD_TOTAL_PAGED_RESULTS_POLICY).as(enumConstant(CountPolicy.class)), result.get(QueryResponse.FIELD_TOTAL_PAGED_RESULTS).asInteger()); } else { - logger.debug("Script returned unexpected query result structure: ", + logger.debug("Script returned unexpected query result structure: {}", result.getObject()); return new InternalServerErrorException( "Script returned unexpected query result structure of type " diff --git a/openidm-shell/src/main/java/org/forgerock/openidm/shell/CustomCommandScope.java b/openidm-shell/src/main/java/org/forgerock/openidm/shell/CustomCommandScope.java index 1ffb655145..13db4ad158 100644 --- a/openidm-shell/src/main/java/org/forgerock/openidm/shell/CustomCommandScope.java +++ b/openidm-shell/src/main/java/org/forgerock/openidm/shell/CustomCommandScope.java @@ -245,9 +245,9 @@ protected List getAllMethodsByName(String name) { Collections.sort(allNamedMethods, new Comparator() { public int compare(Method o1, Method o2) { - Integer l1 = o1.getParameterTypes().length; - Integer l2 = o2.getParameterTypes().length; - return l1.compareTo(l2); + int l1 = o1.getParameterTypes().length; + int l2 = o2.getParameterTypes().length; + return Integer.compare(l1, l2); } }); diff --git a/openidm-util/src/main/java/org/forgerock/openidm/crypto/FieldStorageSchemeImpl.java b/openidm-util/src/main/java/org/forgerock/openidm/crypto/FieldStorageSchemeImpl.java index 8545f5ebc5..d86da8c249 100644 --- a/openidm-util/src/main/java/org/forgerock/openidm/crypto/FieldStorageSchemeImpl.java +++ b/openidm-util/src/main/java/org/forgerock/openidm/crypto/FieldStorageSchemeImpl.java @@ -23,6 +23,7 @@ * * Copyright 2006-2008 Sun Microsystems, Inc. * Portions Copyright 2010-2015 ForgeRock AS. + * Portions Copyright 2026 3A Systems, LLC. */ package org.forgerock.openidm.crypto; @@ -133,7 +134,7 @@ public boolean fieldMatches(String plaintextfield, String storedField) { saltLength = decodedBytes.length - digestSize; if (saltLength <= 0) { - logger.error("Invalid decoded stored field", storedField); + logger.error("Invalid decoded stored field: unexpected length"); return false; } saltBytes = new byte[saltLength]; @@ -141,7 +142,7 @@ public boolean fieldMatches(String plaintextfield, String storedField) { System.arraycopy(decodedBytes, digestSize, saltBytes, 0, saltLength); } catch (Exception e) { // May catch NPE if Base64.decode returns null on bad (non-base64) input - logger.error("Cannot decode stored field", storedField, e); + logger.error("Cannot decode stored field", e); return false; } @@ -158,7 +159,7 @@ public boolean fieldMatches(String plaintextfield, String storedField) { try { userDigestBytes = messageDigest.digest(plainPlusSalt); } catch (Exception e) { - logger.error("Cannot encode field", storedField, e); + logger.error("Cannot encode field", e); return false; } finally { Arrays.fill(plainPlusSalt, (byte) 0); diff --git a/openidm-util/src/main/java/org/forgerock/openidm/util/JsonUtil.java b/openidm-util/src/main/java/org/forgerock/openidm/util/JsonUtil.java index c1b7e9cdb6..33043a4979 100644 --- a/openidm-util/src/main/java/org/forgerock/openidm/util/JsonUtil.java +++ b/openidm-util/src/main/java/org/forgerock/openidm/util/JsonUtil.java @@ -12,6 +12,7 @@ * information: "Portions copyright [year] [name of copyright owner]". * * Portions copyright 2011-2016 ForgeRock AS. + * Portions Copyright 2026 3A Systems, LLC. */ package org.forgerock.openidm.util; @@ -90,9 +91,9 @@ public static int compareJsonObjectValues(final Object left, final Object right) final String s2 = (String) right; return s1.compareToIgnoreCase(s2); } else if (left instanceof Number && right instanceof Number) { - final Double n1 = ((Number) left).doubleValue(); - final Double n2 = ((Number) right).doubleValue(); - return n1.compareTo(n2); + final double n1 = ((Number) left).doubleValue(); + final double n2 = ((Number) right).doubleValue(); + return Double.compare(n1, n2); } else if (left instanceof Boolean && right instanceof Boolean) { final Boolean b1 = (Boolean) left; final Boolean b2 = (Boolean) right;