Fixed all (I think) of the CodeQL issues. A number of them were false
positives or not worth fixing: like restructuring the methods of the
ArrayOfNumbersSerDe to use the Visitor Pattern. That is just too much
work, generates a whole slew of subclasses which would probably be
slower.
There may be a few CodeQL issues I didn't catch, which this push may
reveal. Then I'll deal with those.
diff --git a/src/main/java/org/apache/datasketches/common/ArrayOfDoublesSerDe.java b/src/main/java/org/apache/datasketches/common/ArrayOfDoublesSerDe.java
index a22bff4..1e2f110 100644
--- a/src/main/java/org/apache/datasketches/common/ArrayOfDoublesSerDe.java
+++ b/src/main/java/org/apache/datasketches/common/ArrayOfDoublesSerDe.java
@@ -66,7 +66,7 @@
Objects.requireNonNull(mem, "Memory must not be null");
if (numItems <= 0) { return new Double[0]; }
long offset = offsetBytes;
- Util.checkBounds(offset, Double.BYTES * numItems, mem.getCapacity());
+ Util.checkBounds(offset, Double.BYTES * (long)numItems, mem.getCapacity());
final Double[] array = new Double[numItems];
for (int i = 0; i < numItems; i++) {
diff --git a/src/main/java/org/apache/datasketches/common/ArrayOfLongsSerDe.java b/src/main/java/org/apache/datasketches/common/ArrayOfLongsSerDe.java
index 2a96db1..f292ba0 100644
--- a/src/main/java/org/apache/datasketches/common/ArrayOfLongsSerDe.java
+++ b/src/main/java/org/apache/datasketches/common/ArrayOfLongsSerDe.java
@@ -66,7 +66,7 @@
Objects.requireNonNull(mem, "Memory must not be null");
if (numItems <= 0) { return new Long[0]; }
long offset = offsetBytes;
- Util.checkBounds(offset, Long.BYTES * numItems, mem.getCapacity());
+ Util.checkBounds(offset, Long.BYTES * (long)numItems, mem.getCapacity());
final Long[] array = new Long[numItems];
for (int i = 0; i < numItems; i++) {
array[i] = mem.getLong(offset);
diff --git a/src/main/java/org/apache/datasketches/common/ArrayOfStringsSerDe.java b/src/main/java/org/apache/datasketches/common/ArrayOfStringsSerDe.java
index 6c4354f..2bbe39e 100644
--- a/src/main/java/org/apache/datasketches/common/ArrayOfStringsSerDe.java
+++ b/src/main/java/org/apache/datasketches/common/ArrayOfStringsSerDe.java
@@ -126,7 +126,7 @@
@Override
public String toString(final String item) {
if (item == null) { return "null"; }
- return item.toString();
+ return item;
}
@Override
diff --git a/src/main/java/org/apache/datasketches/common/ArrayOfUtf16StringsSerDe.java b/src/main/java/org/apache/datasketches/common/ArrayOfUtf16StringsSerDe.java
index bc6c400..80afa78 100644
--- a/src/main/java/org/apache/datasketches/common/ArrayOfUtf16StringsSerDe.java
+++ b/src/main/java/org/apache/datasketches/common/ArrayOfUtf16StringsSerDe.java
@@ -120,7 +120,7 @@
@Override
public String toString(final String item) {
if (item == null) { return "null"; }
- return item.toString();
+ return item;
}
@Override
diff --git a/src/main/java/org/apache/datasketches/kll/KllDirectDoublesSketch.java b/src/main/java/org/apache/datasketches/kll/KllDirectDoublesSketch.java
index ed20df6..58438c0 100644
--- a/src/main/java/org/apache/datasketches/kll/KllDirectDoublesSketch.java
+++ b/src/main/java/org/apache/datasketches/kll/KllDirectDoublesSketch.java
@@ -73,7 +73,7 @@
final WritableMemory wmem,
final MemoryRequestServer memReqSvr,
final KllMemoryValidate memVal) {
- super(sketchStructure, wmem);
+ super(sketchStructure);
this.wmem = wmem;
this.memReqSvr = memReqSvr;
readOnly = (wmem != null && wmem.isReadOnly()) || sketchStructure != UPDATABLE;
diff --git a/src/main/java/org/apache/datasketches/kll/KllDirectFloatsSketch.java b/src/main/java/org/apache/datasketches/kll/KllDirectFloatsSketch.java
index a23a33b..6e97023 100644
--- a/src/main/java/org/apache/datasketches/kll/KllDirectFloatsSketch.java
+++ b/src/main/java/org/apache/datasketches/kll/KllDirectFloatsSketch.java
@@ -73,7 +73,7 @@
final WritableMemory wmem,
final MemoryRequestServer memReqSvr,
final KllMemoryValidate memVal) {
- super(sketchStructure, wmem);
+ super(sketchStructure);
this.wmem = wmem;
this.memReqSvr = memReqSvr;
readOnly = (wmem != null && wmem.isReadOnly()) || sketchStructure != UPDATABLE;
diff --git a/src/main/java/org/apache/datasketches/kll/KllDoublesSketch.java b/src/main/java/org/apache/datasketches/kll/KllDoublesSketch.java
index 76c2ed3..ba1737f 100644
--- a/src/main/java/org/apache/datasketches/kll/KllDoublesSketch.java
+++ b/src/main/java/org/apache/datasketches/kll/KllDoublesSketch.java
@@ -51,8 +51,7 @@
final static int ITEM_BYTES = Double.BYTES;
KllDoublesSketch(
- final SketchStructure sketchStructure,
- final WritableMemory wmem) {
+ final SketchStructure sketchStructure) {
super(SketchType.DOUBLES_SKETCH, sketchStructure);
}
diff --git a/src/main/java/org/apache/datasketches/kll/KllFloatsSketch.java b/src/main/java/org/apache/datasketches/kll/KllFloatsSketch.java
index 6f81d24..69fd9da 100644
--- a/src/main/java/org/apache/datasketches/kll/KllFloatsSketch.java
+++ b/src/main/java/org/apache/datasketches/kll/KllFloatsSketch.java
@@ -51,8 +51,7 @@
final static int ITEM_BYTES = Float.BYTES;
KllFloatsSketch(
- final SketchStructure sketchStructure,
- final WritableMemory wmem) {
+ final SketchStructure sketchStructure) {
super(SketchType.FLOATS_SKETCH, sketchStructure);
}
diff --git a/src/main/java/org/apache/datasketches/kll/KllHeapDoublesSketch.java b/src/main/java/org/apache/datasketches/kll/KllHeapDoublesSketch.java
index 205fdc9..1e79026 100644
--- a/src/main/java/org/apache/datasketches/kll/KllHeapDoublesSketch.java
+++ b/src/main/java/org/apache/datasketches/kll/KllHeapDoublesSketch.java
@@ -66,7 +66,7 @@
* experimental as they have not been as well characterized.
*/
KllHeapDoublesSketch(final int k, final int m) {
- super(UPDATABLE, null);
+ super(UPDATABLE);
KllHelper.checkM(m);
KllHelper.checkK(k, m);
this.levelsArr = new int[] {k, k};
@@ -89,7 +89,7 @@
private KllHeapDoublesSketch(
final Memory srcMem,
final KllMemoryValidate memValidate) {
- super(UPDATABLE, null);
+ super(UPDATABLE);
final SketchStructure memStructure = memValidate.sketchStructure;
this.k = memValidate.k;
this.m = memValidate.m;
diff --git a/src/main/java/org/apache/datasketches/kll/KllHeapFloatsSketch.java b/src/main/java/org/apache/datasketches/kll/KllHeapFloatsSketch.java
index 348326b..941416c 100644
--- a/src/main/java/org/apache/datasketches/kll/KllHeapFloatsSketch.java
+++ b/src/main/java/org/apache/datasketches/kll/KllHeapFloatsSketch.java
@@ -66,7 +66,7 @@
* experimental as they have not been as well characterized.
*/
KllHeapFloatsSketch(final int k, final int m) {
- super(UPDATABLE, null);
+ super(UPDATABLE);
KllHelper.checkM(m);
KllHelper.checkK(k, m);
this.levelsArr = new int[] {k, k};
@@ -89,7 +89,7 @@
private KllHeapFloatsSketch(
final Memory srcMem,
final KllMemoryValidate memValidate) {
- super(UPDATABLE, null);
+ super(UPDATABLE);
final SketchStructure memStructure = memValidate.sketchStructure;
this.k = memValidate.k;
this.m = memValidate.m;
diff --git a/src/main/java/org/apache/datasketches/kll/KllPreambleUtil.java b/src/main/java/org/apache/datasketches/kll/KllPreambleUtil.java
index 7067e03..8fecc61 100644
--- a/src/main/java/org/apache/datasketches/kll/KllPreambleUtil.java
+++ b/src/main/java/org/apache/datasketches/kll/KllPreambleUtil.java
@@ -199,7 +199,6 @@
*
* @param mem the given Memory
* @param includeData if true, includes detail of retained data.
- * @param serDe the serialization/deserialization class, required for KllItemsSketch.
* @return the summary string.
*/
static String toString(final Memory mem, final SketchType sketchType, final boolean includeData) {
diff --git a/src/main/java/org/apache/datasketches/kll/KllSketch.java b/src/main/java/org/apache/datasketches/kll/KllSketch.java
index 9ef0048..f591ecd 100644
--- a/src/main/java/org/apache/datasketches/kll/KllSketch.java
+++ b/src/main/java/org/apache/datasketches/kll/KllSketch.java
@@ -315,7 +315,7 @@
}
int[] getLevelsArray(final SketchStructure structure) {
- if (structure == UPDATABLE) { return levelsArr; }
+ if (structure == UPDATABLE) { return levelsArr.clone(); }
else if (structure == COMPACT_FULL) { return Arrays.copyOf(levelsArr, levelsArr.length - 1); }
else { return new int[0]; }
}
diff --git a/src/main/java/org/apache/datasketches/quantiles/ItemsSketchSortedView.java b/src/main/java/org/apache/datasketches/quantiles/ItemsSketchSortedView.java
index a56ff70..70fdd31 100644
--- a/src/main/java/org/apache/datasketches/quantiles/ItemsSketchSortedView.java
+++ b/src/main/java/org/apache/datasketches/quantiles/ItemsSketchSortedView.java
@@ -53,7 +53,6 @@
* @param cumWeights sorted, monotonically increasing cumulative weights.
* @param totalN the total number of items presented to the sketch.
* @param comparator comparator for type T
- * @param T the given type
*/
ItemsSketchSortedView(final T[] quantiles, final long[] cumWeights, final long totalN,
final Comparator<T> comparator) {
diff --git a/src/test/java/org/apache/datasketches/common/ArrayOfXSerDeTest.java b/src/test/java/org/apache/datasketches/common/ArrayOfXSerDeTest.java
index 93a4952..bb3aa1e 100644
--- a/src/test/java/org/apache/datasketches/common/ArrayOfXSerDeTest.java
+++ b/src/test/java/org/apache/datasketches/common/ArrayOfXSerDeTest.java
@@ -203,7 +203,7 @@
byteArr = serDe.serializeToByteArray(new String[] {item});
assertEquals(byteArr.length, bytes);
assertEquals(serDe.sizeOf(item), bytes);
- assertEquals(serDe.toString(item), item.toString());
+ assertEquals(serDe.toString(item), item);
wmem = WritableMemory.allocate(offset + byteArr.length);
wmem.putByteArray(offset, byteArr, 0, byteArr.length);
@@ -247,7 +247,7 @@
byteArr = serDe.serializeToByteArray(new String[] {item});
assertEquals(byteArr.length, bytes);
assertEquals(serDe.sizeOf(item), bytes);
- assertEquals(serDe.toString(item), item.toString());
+ assertEquals(serDe.toString(item), item);
wmem = WritableMemory.allocate(offset + byteArr.length);
wmem.putByteArray(offset, byteArr, 0, byteArr.length);
diff --git a/src/test/java/org/apache/datasketches/frequencies/SerDeCompatibilityTest.java b/src/test/java/org/apache/datasketches/frequencies/SerDeCompatibilityTest.java
index 9cd2b39..a492b4c 100644
--- a/src/test/java/org/apache/datasketches/frequencies/SerDeCompatibilityTest.java
+++ b/src/test/java/org/apache/datasketches/frequencies/SerDeCompatibilityTest.java
@@ -20,7 +20,6 @@
package org.apache.datasketches.frequencies;
import static org.testng.Assert.assertEquals;
-import static org.testng.Assert.assertFalse;
import static org.testng.Assert.assertTrue;
import java.io.FileOutputStream;
diff --git a/src/test/java/org/apache/datasketches/kll/KllDirectDoublesSketchTest.java b/src/test/java/org/apache/datasketches/kll/KllDirectDoublesSketchTest.java
index d445391..5d87388 100644
--- a/src/test/java/org/apache/datasketches/kll/KllDirectDoublesSketchTest.java
+++ b/src/test/java/org/apache/datasketches/kll/KllDirectDoublesSketchTest.java
@@ -277,16 +277,14 @@
assertEquals(sketch2.getMaxItem(), 1_000_000);
}
- @SuppressWarnings("unused")
@Test(expectedExceptions = SketchesArgumentException.class)
public void kTooSmall() {
- final KllDoublesSketch sketch1 = getUpdatableDirectDoublesSketch(KllSketch.DEFAULT_M - 1, 0);
+ getUpdatableDirectDoublesSketch(KllSketch.DEFAULT_M - 1, 0);
}
- @SuppressWarnings("unused")
@Test(expectedExceptions = SketchesArgumentException.class)
public void kTooLarge() {
- final KllDoublesSketch sketch1 = getUpdatableDirectDoublesSketch(KllSketch.MAX_K + 1, 0);
+ getUpdatableDirectDoublesSketch(KllSketch.MAX_K + 1, 0);
}
@Test
diff --git a/src/test/java/org/apache/datasketches/kll/KllDirectFloatsSketchTest.java b/src/test/java/org/apache/datasketches/kll/KllDirectFloatsSketchTest.java
index 7d2c24d..7be56d7 100644
--- a/src/test/java/org/apache/datasketches/kll/KllDirectFloatsSketchTest.java
+++ b/src/test/java/org/apache/datasketches/kll/KllDirectFloatsSketchTest.java
@@ -277,16 +277,14 @@
assertEquals(sketch2.getMaxItem(), 1_000_000F);
}
- @SuppressWarnings("unused")
@Test(expectedExceptions = SketchesArgumentException.class)
public void kTooSmall() {
- final KllFloatsSketch sketch1 = getUpdatableDirectFloatSketch(KllSketch.DEFAULT_M - 1, 0);
+ getUpdatableDirectFloatSketch(KllSketch.DEFAULT_M - 1, 0);
}
- @SuppressWarnings("unused")
@Test(expectedExceptions = SketchesArgumentException.class)
public void kTooLarge() {
- final KllFloatsSketch sketch1 = getUpdatableDirectFloatSketch(KllSketch.MAX_K + 1, 0);
+ getUpdatableDirectFloatSketch(KllSketch.MAX_K + 1, 0);
}
@Test
diff --git a/src/test/java/org/apache/datasketches/kll/KllItemsSketchTest.java b/src/test/java/org/apache/datasketches/kll/KllItemsSketchTest.java
index 21e377c..b11efe8 100644
--- a/src/test/java/org/apache/datasketches/kll/KllItemsSketchTest.java
+++ b/src/test/java/org/apache/datasketches/kll/KllItemsSketchTest.java
@@ -166,7 +166,7 @@
final double trueRank = (double) i / n;
String s = Util.intToFixedLengthString(i, digits);
double r = sketch.getRank(s);
- assertEquals(sketch.getRank(s), trueRank, PMF_EPS_FOR_K_256, "for value " + s);
+ assertEquals(r, trueRank, PMF_EPS_FOR_K_256, "for value " + s);
}
// test getPMF
diff --git a/src/test/java/org/apache/datasketches/quantilescommon/CrossCheckQuantilesTest.java b/src/test/java/org/apache/datasketches/quantilescommon/CrossCheckQuantilesTest.java
index 3efaacc..0da1d90 100644
--- a/src/test/java/org/apache/datasketches/quantilescommon/CrossCheckQuantilesTest.java
+++ b/src/test/java/org/apache/datasketches/quantilescommon/CrossCheckQuantilesTest.java
@@ -32,6 +32,7 @@
import java.util.Comparator;
import org.apache.datasketches.common.ArrayOfStringsSerDe;
+import org.apache.datasketches.common.SketchesArgumentException;
import org.apache.datasketches.kll.KllDoublesSketch;
import org.apache.datasketches.kll.KllDoublesSketchSortedView;
import org.apache.datasketches.kll.KllFloatsSketch;
@@ -191,7 +192,9 @@
}
println("");
- int maxItemValue = Integer.parseInt(getMaxItemValue(set));
+ int maxItemValue;
+ try { maxItemValue = Integer.parseInt(getMaxItemValue(set)); }
+ catch (NumberFormatException e) { throw new SketchesArgumentException(e.toString()); }
for (int v = 5; v <= maxItemValue + 5; v += 5) {
String s = intToFixedLengthString(v, 2);
trueRank = getTrueItemRank(svCumWeights[set], svIValues[set], s, crit, comparator);
@@ -255,7 +258,7 @@
String testIQ;
for (int i = 0; i <= twoN; i++) {
double normRank = i / dTwoN;
- trueIQ = getTrueItemQuantile(svCumWeights[set], svIValues[set], normRank, crit, comparator);
+ trueIQ = getTrueItemQuantile(svCumWeights[set], svIValues[set], normRank, crit);
testIQ = kllItemsSV.getQuantile(normRank, crit);
assertEquals(testIQ, trueIQ);
diff --git a/src/test/java/org/apache/datasketches/quantilescommon/LinearRanksAndQuantiles.java b/src/test/java/org/apache/datasketches/quantilescommon/LinearRanksAndQuantiles.java
index 4772926..fd8885c 100644
--- a/src/test/java/org/apache/datasketches/quantilescommon/LinearRanksAndQuantiles.java
+++ b/src/test/java/org/apache/datasketches/quantilescommon/LinearRanksAndQuantiles.java
@@ -166,8 +166,7 @@
final long[] cumWeights,
final T[] quantiles,
final double givenNormR,
- final QuantileSearchCriteria inclusive,
- final Comparator<? super T> comp) {
+ final QuantileSearchCriteria inclusive) {
final int len = cumWeights.length;
final long N = cumWeights[len - 1];
T result = null;