You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@druid.apache.org by ji...@apache.org on 2020/04/10 22:43:37 UTC

[druid] branch 0.18.0 updated: Fix potential integer overflow issues (#9609) (#9673)

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

jihoonson pushed a commit to branch 0.18.0
in repository https://gitbox.apache.org/repos/asf/druid.git


The following commit(s) were added to refs/heads/0.18.0 by this push:
     new 45b89cc  Fix potential integer overflow issues (#9609) (#9673)
45b89cc is described below

commit 45b89cc14922ff40fb355496cf985996159a41bb
Author: Suneet Saldanha <44...@users.noreply.github.com>
AuthorDate: Fri Apr 10 15:43:16 2020 -0700

    Fix potential integer overflow issues (#9609) (#9673)
    
    ApproximateHistogram - seems unlikely
    SegmentAnalyzer - unclear if this is an actual issue
    GenericIndexedWriter - unclear if this is an actual issue
    IncrementalIndexRow and OnheapIncrementalIndex are non-issues becaus it's very
    unlikely for the number of dims to be large enough to hit the overflow
    condition
---
 .../druid/query/aggregation/histogram/ApproximateHistogram.java     | 2 +-
 .../main/java/org/apache/druid/query/metadata/SegmentAnalyzer.java  | 4 ++--
 .../java/org/apache/druid/segment/data/GenericIndexedWriter.java    | 6 +++---
 .../org/apache/druid/segment/incremental/IncrementalIndexRow.java   | 2 +-
 .../apache/druid/segment/incremental/OnheapIncrementalIndex.java    | 4 ++--
 5 files changed, 9 insertions(+), 9 deletions(-)

diff --git a/extensions-core/histogram/src/main/java/org/apache/druid/query/aggregation/histogram/ApproximateHistogram.java b/extensions-core/histogram/src/main/java/org/apache/druid/query/aggregation/histogram/ApproximateHistogram.java
index 35ac0b4..ed67b8d 100644
--- a/extensions-core/histogram/src/main/java/org/apache/druid/query/aggregation/histogram/ApproximateHistogram.java
+++ b/extensions-core/histogram/src/main/java/org/apache/druid/query/aggregation/histogram/ApproximateHistogram.java
@@ -1557,7 +1557,7 @@ public class ApproximateHistogram
       final double s = probabilities[j] * this.count();
 
       int i = 0;
-      int sum = 0;
+      long sum = 0;
       int k = 1;
       long count;
       while (k <= this.binCount()) {
diff --git a/processing/src/main/java/org/apache/druid/query/metadata/SegmentAnalyzer.java b/processing/src/main/java/org/apache/druid/query/metadata/SegmentAnalyzer.java
index 15acc4c..c5f1800 100644
--- a/processing/src/main/java/org/apache/druid/query/metadata/SegmentAnalyzer.java
+++ b/processing/src/main/java/org/apache/druid/query/metadata/SegmentAnalyzer.java
@@ -207,8 +207,8 @@ public class SegmentAnalyzer
         for (int i = 0; i < cardinality; ++i) {
           String value = bitmapIndex.getValue(i);
           if (value != null) {
-            size += StringUtils.estimatedBinaryLengthAsUTF8(value) * bitmapIndex.getBitmap(bitmapIndex.getIndex(value))
-                                                                                .size();
+            size += StringUtils.estimatedBinaryLengthAsUTF8(value) *
+                    ((long) bitmapIndex.getBitmap(bitmapIndex.getIndex(value)).size());
           }
         }
       }
diff --git a/processing/src/main/java/org/apache/druid/segment/data/GenericIndexedWriter.java b/processing/src/main/java/org/apache/druid/segment/data/GenericIndexedWriter.java
index 7578506..95bc141 100644
--- a/processing/src/main/java/org/apache/druid/segment/data/GenericIndexedWriter.java
+++ b/processing/src/main/java/org/apache/druid/segment/data/GenericIndexedWriter.java
@@ -321,10 +321,10 @@ public class GenericIndexedWriter<T> implements Serializer
     final long numBytesWritten = headerOut.size() + valuesOut.size();
 
     Preconditions.checkState(
-        headerOut.size() == (numWritten * 4),
+        headerOut.size() == (numWritten * 4L),
         "numWritten[%s] number of rows should have [%s] bytes written to headerOut, had[%s]",
         numWritten,
-        numWritten * 4,
+        numWritten * 4L,
         headerOut.size()
     );
     Preconditions.checkState(
@@ -459,7 +459,7 @@ public class GenericIndexedWriter<T> implements Serializer
     long relativeRefBytes = 0;
     long relativeNumBytes;
     try (SmooshedWriter smooshChannel = smoosher
-        .addWithSmooshedWriter(generateHeaderFileName(filenameBase), numWritten * Integer.BYTES)) {
+        .addWithSmooshedWriter(generateHeaderFileName(filenameBase), ((long) numWritten) * Integer.BYTES)) {
 
       // following block converts long header indexes into int header indexes.
       for (int pos = 0; pos < numWritten; pos++) {
diff --git a/processing/src/main/java/org/apache/druid/segment/incremental/IncrementalIndexRow.java b/processing/src/main/java/org/apache/druid/segment/incremental/IncrementalIndexRow.java
index 5c4d7b6..987ee5f 100644
--- a/processing/src/main/java/org/apache/druid/segment/incremental/IncrementalIndexRow.java
+++ b/processing/src/main/java/org/apache/druid/segment/incremental/IncrementalIndexRow.java
@@ -126,7 +126,7 @@ public final class IncrementalIndexRow
    */
   public long estimateBytesInMemory()
   {
-    long sizeInBytes = Long.BYTES + Integer.BYTES * dims.length + Long.BYTES + Long.BYTES;
+    long sizeInBytes = Long.BYTES + ((long) Integer.BYTES) * dims.length + Long.BYTES + Long.BYTES;
     sizeInBytes += dimsKeySize;
     return sizeInBytes;
   }
diff --git a/processing/src/main/java/org/apache/druid/segment/incremental/OnheapIncrementalIndex.java b/processing/src/main/java/org/apache/druid/segment/incremental/OnheapIncrementalIndex.java
index 2d64346..04cdaba 100644
--- a/processing/src/main/java/org/apache/druid/segment/incremental/OnheapIncrementalIndex.java
+++ b/processing/src/main/java/org/apache/druid/segment/incremental/OnheapIncrementalIndex.java
@@ -105,10 +105,10 @@ public class OnheapIncrementalIndex extends IncrementalIndex<Aggregator>
    */
   private static long getMaxBytesPerRowForAggregators(IncrementalIndexSchema incrementalIndexSchema)
   {
-    long maxAggregatorIntermediateSize = Integer.BYTES * incrementalIndexSchema.getMetrics().length;
+    long maxAggregatorIntermediateSize = ((long) Integer.BYTES) * incrementalIndexSchema.getMetrics().length;
     maxAggregatorIntermediateSize += Arrays.stream(incrementalIndexSchema.getMetrics())
                                            .mapToLong(aggregator -> aggregator.getMaxIntermediateSizeWithNulls()
-                                                                    + Long.BYTES * 2)
+                                                                    + Long.BYTES * 2L)
                                            .sum();
     return maxAggregatorIntermediateSize;
   }


---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@druid.apache.org
For additional commands, e-mail: commits-help@druid.apache.org