From 1621a617824e49abad9926a17f4b38eddb968634 Mon Sep 17 00:00:00 2001 From: proost Date: Mon, 16 Feb 2026 16:43:36 +0900 Subject: [PATCH 1/2] fix: reject weight edge cases --- .../datasketches/sampling/VarOptItemsSketch.java | 2 +- .../datasketches/sampling/VarOptItemsSketchTest.java | 12 ++++++++++++ 2 files changed, 13 insertions(+), 1 deletion(-) diff --git a/src/main/java/org/apache/datasketches/sampling/VarOptItemsSketch.java b/src/main/java/org/apache/datasketches/sampling/VarOptItemsSketch.java index a5f6fc909..d2d8a0ed5 100644 --- a/src/main/java/org/apache/datasketches/sampling/VarOptItemsSketch.java +++ b/src/main/java/org/apache/datasketches/sampling/VarOptItemsSketch.java @@ -822,7 +822,7 @@ void update(final T item, final double weight, final boolean mark) { if (item == null) { return; } - if (weight <= 0.0) { + if (weight <= 0.0 || Double.isNaN(weight) || Double.isInfinite(weight)) { throw new SketchesArgumentException("Item weights must be strictly positive: " + weight + ", for item " + item.toString()); } diff --git a/src/test/java/org/apache/datasketches/sampling/VarOptItemsSketchTest.java b/src/test/java/org/apache/datasketches/sampling/VarOptItemsSketchTest.java index 43aed7ef8..52a66b721 100644 --- a/src/test/java/org/apache/datasketches/sampling/VarOptItemsSketchTest.java +++ b/src/test/java/org/apache/datasketches/sampling/VarOptItemsSketchTest.java @@ -264,6 +264,18 @@ public void checkInvalidWeight() { vis.update("invalidWeight", -1.0); // should fail } + @Test(expectedExceptions = SketchesArgumentException.class) + public void checkNaNWeight() { + final VarOptItemsSketch vis = VarOptItemsSketch.newInstance(5); + vis.update("invalidWeight", Double.NaN); + } + + @Test(expectedExceptions = SketchesArgumentException.class) + public void checkInfiniteWeight() { + final VarOptItemsSketch vis = VarOptItemsSketch.newInstance(5); + vis.update("invalidWeight", Double.POSITIVE_INFINITY); + } + @Test public void checkCorruptSerializedWeight() { final VarOptItemsSketch vis = VarOptItemsSketch.newInstance(24); From 26331b6b548642c6623aa64f356e738aef2bc1c8 Mon Sep 17 00:00:00 2001 From: proost Date: Mon, 16 Feb 2026 16:53:22 +0900 Subject: [PATCH 2/2] refactor: change error message --- .../org/apache/datasketches/sampling/VarOptItemsSketch.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/org/apache/datasketches/sampling/VarOptItemsSketch.java b/src/main/java/org/apache/datasketches/sampling/VarOptItemsSketch.java index d0e8fad4b..121b6678a 100644 --- a/src/main/java/org/apache/datasketches/sampling/VarOptItemsSketch.java +++ b/src/main/java/org/apache/datasketches/sampling/VarOptItemsSketch.java @@ -828,7 +828,7 @@ void update(final T item, final double weight, final boolean mark) { return; } if (weight <= 0.0 || Double.isNaN(weight) || Double.isInfinite(weight)) { - throw new SketchesArgumentException("Item weights must be strictly positive: " + throw new SketchesArgumentException("Item weights must be strictly positive and finite number: " + weight + ", for item " + item.toString()); } ++n_;