From 3775a25870ac2a8f4463c3429e10667ae93c2ec7 Mon Sep 17 00:00:00 2001
From: Chris Ridd <chris.ridd@forgerock.com>
Date: Mon, 04 Nov 2013 11:06:55 +0000
Subject: [PATCH] CR-2522 Fix OPENDJ-1189: Integer overflow while sizing scratch files building indexes
---
opends/src/server/org/opends/server/backends/jeb/importLDIF/Importer.java | 21 ++++++++++++++++++---
1 files changed, 18 insertions(+), 3 deletions(-)
diff --git a/opends/src/server/org/opends/server/backends/jeb/importLDIF/Importer.java b/opends/src/server/org/opends/server/backends/jeb/importLDIF/Importer.java
index 7241925..bd10a44 100644
--- a/opends/src/server/org/opends/server/backends/jeb/importLDIF/Importer.java
+++ b/opends/src/server/org/opends/server/backends/jeb/importLDIF/Importer.java
@@ -29,6 +29,8 @@
import static org.opends.messages.JebMessages.*;
import static org.opends.server.loggers.ErrorLogger.*;
+import static org.opends.server.loggers.debug.DebugLogger.debugEnabled;
+import static org.opends.server.loggers.debug.DebugLogger.getTracer;
import static org.opends.server.util.DynamicConstants.*;
import static org.opends.server.util.ServerConstants.*;
import static org.opends.server.util.StaticUtils.*;
@@ -53,6 +55,7 @@
import org.opends.server.config.ConfigException;
import org.opends.server.core.DirectoryServer;
import org.opends.server.extensions.DiskSpaceMonitor;
+import org.opends.server.loggers.debug.DebugTracer;
import org.opends.server.types.*;
import org.opends.server.util.LDIFReader;
import org.opends.server.util.Platform;
@@ -67,6 +70,11 @@
*/
public final class Importer implements DiskSpaceMonitorHandler
{
+ /**
+ * The tracer object for the debug logger.
+ */
+ private static final DebugTracer TRACER = getTracer();
+
private static final int TIMER_INTERVAL = 10000;
private static final int KB = 1024;
private static final int MB = (KB * KB);
@@ -484,7 +492,10 @@
// Scratch writers allocate 4 buffers per index as well.
final int totalPhaseOneBufferCount =
phaseOneBufferCount + (4 * indexCount);
- bufferSize = (int) (phaseOneBufferMemory / totalPhaseOneBufferCount);
+ long longBufferSize = phaseOneBufferMemory / totalPhaseOneBufferCount;
+ // We need (2 * bufferSize) to fit in an int for the insertByteStream
+ // and deleteByteStream constructors.
+ bufferSize = (int) Math.min(longBufferSize, Integer.MAX_VALUE / 2);
if (bufferSize > MAX_BUFFER_SIZE)
{
@@ -3305,8 +3316,12 @@
}
catch (Exception e)
{
- Message message =
- ERR_JEB_IMPORT_LDIF_REBUILD_INDEX_TASK_ERR.get(e.getMessage());
+ if (debugEnabled())
+ {
+ TRACER.debugCaught(DebugLogLevel.ERROR, e);
+ }
+ Message message = ERR_JEB_IMPORT_LDIF_REBUILD_INDEX_TASK_ERR.get(
+ stackTraceToSingleLineString(e));
logError(message);
isCanceled = true;
throw e;
--
Gitblit v1.10.0