From 4d92197423cfb018df36620790dff4ad6be66418 Mon Sep 17 00:00:00 2001 From: Andreas Huber Date: Sat, 7 Sep 2019 16:50:40 +0200 Subject: [PATCH] fix stackoverflow in Int/LongList.intersectionUnsorted --- .../src/main/java/org/lucares/collections/IntList.java | 4 ++-- .../src/main/java/org/lucares/collections/LongList.java | 4 ++-- .../test/java/org/lucares/collections/IntListTest.java | 8 ++++++++ .../test/java/org/lucares/collections/LongListTest.java | 8 ++++++++ 4 files changed, 20 insertions(+), 4 deletions(-) diff --git a/primitiveCollections/src/main/java/org/lucares/collections/IntList.java b/primitiveCollections/src/main/java/org/lucares/collections/IntList.java index 42565c3..744ff38 100644 --- a/primitiveCollections/src/main/java/org/lucares/collections/IntList.java +++ b/primitiveCollections/src/main/java/org/lucares/collections/IntList.java @@ -1092,13 +1092,13 @@ public final class IntList implements Serializable, Cloneable { final int bSize = b.size(); final IntList result; - if (aSize < bSize) { + if (aSize <= bSize) { result = new IntList(Math.min(aSize, bSize)); for (int l = 0; l < aSize; l++) { final int lv = a.getUnsafe(l); - if (b.indexOf(lv) >= 0) { + if (b.indexOf(lv) >= 0 && result.indexOf(lv) < 0) { result.addUnsafe(lv); } diff --git a/primitiveCollections/src/main/java/org/lucares/collections/LongList.java b/primitiveCollections/src/main/java/org/lucares/collections/LongList.java index 1ee609d..f3fbdb7 100644 --- a/primitiveCollections/src/main/java/org/lucares/collections/LongList.java +++ b/primitiveCollections/src/main/java/org/lucares/collections/LongList.java @@ -1092,13 +1092,13 @@ public final class LongList implements Serializable, Cloneable { final int bSize = b.size(); final LongList result; - if (aSize < bSize) { + if (aSize <= bSize) { result = new LongList(Math.min(aSize, bSize)); for (int l = 0; l < aSize; l++) { final long lv = a.getUnsafe(l); - if (b.indexOf(lv) >= 0) { + if (b.indexOf(lv) >= 0 && result.indexOf(lv) < 0) { result.addUnsafe(lv); } diff --git a/primitiveCollections/src/test/java/org/lucares/collections/IntListTest.java b/primitiveCollections/src/test/java/org/lucares/collections/IntListTest.java index c124506..d6bc1a2 100644 --- a/primitiveCollections/src/test/java/org/lucares/collections/IntListTest.java +++ b/primitiveCollections/src/test/java/org/lucares/collections/IntListTest.java @@ -1565,6 +1565,14 @@ public class IntListTest { final IntList actual = IntList.intersection(a, b); Assertions.assertEquals(IntList.of(4), actual); } + + { + final IntList a = IntList.of(1, 4, 3, 2, 4); + final IntList b = IntList.of(4, 3, 4, 4, 2); + final IntList actual = IntList.intersection(a, b); + actual.sort(); + Assertions.assertEquals(IntList.of(2, 3, 4), actual); + } } @Test diff --git a/primitiveCollections/src/test/java/org/lucares/collections/LongListTest.java b/primitiveCollections/src/test/java/org/lucares/collections/LongListTest.java index 49ae966..1fc3c6f 100644 --- a/primitiveCollections/src/test/java/org/lucares/collections/LongListTest.java +++ b/primitiveCollections/src/test/java/org/lucares/collections/LongListTest.java @@ -1555,6 +1555,14 @@ public class LongListTest { final LongList actual = LongList.intersection(a, b); Assertions.assertEquals(LongList.of(4), actual); } + + { + final LongList a = LongList.of(1, 4, 3, 2, 4); + final LongList b = LongList.of(4, 3, 4, 4, 2); + final LongList actual = LongList.intersection(a, b); + actual.sort(); + Assertions.assertEquals(LongList.of(2, 3, 4), actual); + } } @Test