From e24c2780b6d44c7e5d386e70a1fb3346149ccdc9 Mon Sep 17 00:00:00 2001
From: Valery Kharseko <vharseko@3a-systems.ru>
Date: Tue, 04 Aug 2026 07:15:33 +0000
Subject: [PATCH] Fix CodeQL note-severity alerts: array logging and uncaught NumberFormatException (#817)
---
opendj-server-legacy/src/main/java/org/opends/server/util/BackupManager.java | 46 ++++++++++++++++++++++++++++++++++++++++++----
1 files changed, 42 insertions(+), 4 deletions(-)
diff --git a/opendj-server-legacy/src/main/java/org/opends/server/util/BackupManager.java b/opendj-server-legacy/src/main/java/org/opends/server/util/BackupManager.java
index 98f3522..8eb09b4 100644
--- a/opendj-server-legacy/src/main/java/org/opends/server/util/BackupManager.java
+++ b/opendj-server-legacy/src/main/java/org/opends/server/util/BackupManager.java
@@ -20,6 +20,7 @@
import static java.util.Collections.*;
import static org.opends.messages.BackendMessages.*;
+import static org.opends.messages.CoreMessages.ERR_BACKUPINFO_CANNOT_DECODE;
import static org.opends.messages.UtilityMessages.*;
import static org.opends.server.util.ServerConstants.*;
import static org.opends.server.util.StaticUtils.*;
@@ -515,7 +516,7 @@
private final NewBackupParams newBackupParams;
private final CryptoEngine cryptoEngine;
- NewBackupArchive(String backendID, NewBackupParams backupParams, CryptoEngine crypt)
+ NewBackupArchive(String backendID, NewBackupParams backupParams, CryptoEngine crypt) throws DirectoryException
{
this.backendID = backendID;
this.newBackupParams = backupParams;
@@ -525,11 +526,26 @@
{
Map<String, String> properties = backupParams.baseBackupInfo.getBackupProperties();
latestFileName = properties.get(PROPERTY_LAST_LOGFILE_NAME);
- latestFileSize = Long.parseLong(properties.get(PROPERTY_LAST_LOGFILE_SIZE));
+ latestFileSize = parseLatestFileSize(backupParams, properties.get(PROPERTY_LAST_LOGFILE_SIZE));
}
archiveFilename = BACKUP_BASE_FILENAME + backendID + "-" + backupParams.backupID;
}
+ /** Returns the size recorded by the base backup for the last file it archived. */
+ private static long parseLatestFileSize(NewBackupParams backupParams, String size) throws DirectoryException
+ {
+ try
+ {
+ return Long.parseLong(size);
+ }
+ catch (NumberFormatException e)
+ {
+ throw new DirectoryException(DirectoryServer.getCoreConfigManager().getServerErrorResultCode(),
+ ERR_BACKUPINFO_CANNOT_DECODE.get(backupParams.backupDir.getPath(),
+ PROPERTY_LAST_LOGFILE_SIZE + ": " + size), e);
+ }
+ }
+
String getArchiveFilename()
{
return archiveFilename;
@@ -1553,7 +1569,7 @@
{
final File baseFile = new File(basePath).getCanonicalFile();
final File[] existingFiles = baseFile.getParentFile().listFiles();
- final Pattern pattern = Pattern.compile(baseFile + "\\d*");
+ final Pattern pattern = Pattern.compile(Pattern.quote(baseFile.getPath()) + "\\d*");
int highestNumber = 0;
for (File file : existingFiles)
{
@@ -1561,10 +1577,32 @@
if (pattern.matcher(name).matches())
{
String numberAsString = name.substring(baseFile.getPath().length());
- int number = numberAsString.isEmpty() ? 0 : Integer.valueOf(numberAsString);
+ int number = parseSuffixNumber(numberAsString);
highestNumber = number > highestNumber ? number : highestNumber;
}
}
return highestNumber;
}
+
+ /**
+ * Returns the number held by the provided file name suffix, or 0 if the suffix is empty or holds a
+ * number which is too big to have been generated by this class.
+ */
+ private static int parseSuffixNumber(final String numberAsString)
+ {
+ if (numberAsString.isEmpty())
+ {
+ return 0;
+ }
+ try
+ {
+ return Integer.parseInt(numberAsString);
+ }
+ catch (NumberFormatException e)
+ {
+ logger.trace("Ignoring file suffix \"%s\" which is too big to have been generated by this class",
+ numberAsString);
+ return 0;
+ }
+ }
}
--
Gitblit v1.10.0