You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@commons.apache.org by gg...@apache.org on 2018/11/23 07:32:13 UTC

[2/2] commons-collections git commit: [COLLECTIONS-701] StackOverflowError in SetUniqueList.add() when it receives itself. Closes #57.

[COLLECTIONS-701] StackOverflowError in SetUniqueList.add() when it
receives itself. Closes #57.

Project: http://git-wip-us.apache.org/repos/asf/commons-collections/repo
Commit: http://git-wip-us.apache.org/repos/asf/commons-collections/commit/1979a6e3
Tree: http://git-wip-us.apache.org/repos/asf/commons-collections/tree/1979a6e3
Diff: http://git-wip-us.apache.org/repos/asf/commons-collections/diff/1979a6e3

Branch: refs/heads/master
Commit: 1979a6e31067a18c9ede59ad4518f738512eba82
Parents: dc828f8
Author: Don Jeba <do...@yahoo.com>
Authored: Fri Nov 23 00:32:09 2018 -0700
Committer: Gary Gregory <ga...@gmail.com>
Committed: Fri Nov 23 00:32:09 2018 -0700

----------------------------------------------------------------------
 src/changes/changes.xml                         |  3 +++
 .../collections4/list/SetUniqueList.java        |  2 +-
 .../collections4/list/Collections701Test.java   |  1 -
 .../collections4/list/SetUniqueListTest.java    | 27 +++++++++++++++++++-
 4 files changed, 30 insertions(+), 3 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/commons-collections/blob/1979a6e3/src/changes/changes.xml
----------------------------------------------------------------------
diff --git a/src/changes/changes.xml b/src/changes/changes.xml
index 1d5fb6b..2cc7a7e 100644
--- a/src/changes/changes.xml
+++ b/src/changes/changes.xml
@@ -36,6 +36,9 @@
     <action issue="COLLECTIONS-696" dev="ggregory" type="add" due-to="Maxim Solodovnik">
       AbstractReferenceMap made easier for subclassing; PR #51.
     </action>
+    <action issue="COLLECTIONS-701" dev="ggregory" type="fix" due-to="Don Jeba">
+      StackOverflowError in SetUniqueList.add() when it receives itself.
+    </action>
   </release>
   <release version="4.2" date="2018-07-11" description="Update from Java 6 to Java 7, bug fixes, and small changes.">
     <action issue="COLLECTIONS-681" dev="kinow" type="add" due-to="Stephan Fuhrmann">

http://git-wip-us.apache.org/repos/asf/commons-collections/blob/1979a6e3/src/main/java/org/apache/commons/collections4/list/SetUniqueList.java
----------------------------------------------------------------------
diff --git a/src/main/java/org/apache/commons/collections4/list/SetUniqueList.java b/src/main/java/org/apache/commons/collections4/list/SetUniqueList.java
index 3227e43..b00b2d2 100644
--- a/src/main/java/org/apache/commons/collections4/list/SetUniqueList.java
+++ b/src/main/java/org/apache/commons/collections4/list/SetUniqueList.java
@@ -149,8 +149,8 @@ public class SetUniqueList<E> extends AbstractSerializableListDecorator<E> {
     public void add(final int index, final E object) {
         // adds element if it is not contained already
         if (set.contains(object) == false) {
-            super.add(index, object);
             set.add(object);
+            super.add(index, object);
         }
     }
 

http://git-wip-us.apache.org/repos/asf/commons-collections/blob/1979a6e3/src/test/java/org/apache/commons/collections4/list/Collections701Test.java
----------------------------------------------------------------------
diff --git a/src/test/java/org/apache/commons/collections4/list/Collections701Test.java b/src/test/java/org/apache/commons/collections4/list/Collections701Test.java
index 118369c..82bfd26 100644
--- a/src/test/java/org/apache/commons/collections4/list/Collections701Test.java
+++ b/src/test/java/org/apache/commons/collections4/list/Collections701Test.java
@@ -47,7 +47,6 @@ public class Collections701Test {
     }
 
     @Test
-    @Ignore
     public void testSetUniqueList() {
         final List<Object> source = new ArrayList<>();
         final List<Object> list = SetUniqueList.setUniqueList(source);

http://git-wip-us.apache.org/repos/asf/commons-collections/blob/1979a6e3/src/test/java/org/apache/commons/collections4/list/SetUniqueListTest.java
----------------------------------------------------------------------
diff --git a/src/test/java/org/apache/commons/collections4/list/SetUniqueListTest.java b/src/test/java/org/apache/commons/collections4/list/SetUniqueListTest.java
index 24d2209..e8b6c14 100644
--- a/src/test/java/org/apache/commons/collections4/list/SetUniqueListTest.java
+++ b/src/test/java/org/apache/commons/collections4/list/SetUniqueListTest.java
@@ -139,6 +139,7 @@ public class SetUniqueListTest<E> extends AbstractListTest<E> {
         assertEquals("Size should increase after addAll",
                 size + elements.length, getCollection().size());
     }
+
     @Override
     public void testCollectionIteratorRemove() {
         try {
@@ -148,7 +149,6 @@ public class SetUniqueListTest<E> extends AbstractListTest<E> {
             extraVerify = true;
         }
     }
-
     public void testCollections304() {
         final List<String> list = new LinkedList<>();
         final SetUniqueList<String> decoratedList = SetUniqueList.setUniqueList(list);
@@ -213,6 +213,31 @@ public class SetUniqueListTest<E> extends AbstractListTest<E> {
         assertFalse(subUniqueList.contains("World")); // fails
     }
 
+    public void testCollections701() {
+        final SetUniqueList<Object> uniqueList = new SetUniqueList<>(new ArrayList<>(), new HashSet<>());
+        final Integer obj1 = Integer.valueOf(1);
+        final Integer obj2 = Integer.valueOf(2);
+        uniqueList.add(obj1);
+        uniqueList.add(obj2);
+        assertEquals(2, uniqueList.size());
+        uniqueList.add(uniqueList);
+        assertEquals(3, uniqueList.size());
+        final List<Object> list = new LinkedList<>();
+        final SetUniqueList<Object> decoratedList = SetUniqueList.setUniqueList(list);
+        final String s1 = "Apple";
+        final String s2 = "Lemon";
+        final String s3 = "Orange";
+        final String s4 = "Strawberry";
+        decoratedList.add(s1);
+        decoratedList.add(s2);
+        decoratedList.add(s3);
+        assertEquals(3, decoratedList.size());
+        decoratedList.set(1, s4);
+        assertEquals(3, decoratedList.size());
+        decoratedList.add(decoratedList);
+        assertEquals(4, decoratedList.size());
+    }
+
     //-----------------------------------------------------------------------
     public void testFactory() {
         final Integer[] array = new Integer[] { Integer.valueOf(1), Integer.valueOf(2), Integer.valueOf(1) };