RFR : 7144488 StackOverflowError occurres on list via Collections.synchronizedList(List)

Seán Coffey sean.coffey at oracle.com
Wed Feb 22 14:43:02 UTC 2012


Yes, I stumbled across another few issues in the Collections class while 
looking to expand the testcase for this one. Below are other such cases.

Various hashCode methods lead to recursive calls and this has been 
discussed in the past. It's also mentioned in the javadocs (albeit 
somewhat vaguely)

> Note: While it is permissible for lists to contain themselves as
> elements, extreme caution is advised: the equals and hashCode methods
> are no longer well defined on a such a list.
http://www.velocityreviews.com/forums/t134246-infinite-loops-in-hashcode-and-equals.html

Due to the known issue, I wasn't planning on making any further changes.

regards,
Sean.

         List list = Collections.synchronizedList(new ArrayList());
         list.add(list);
         //int i = list.hashCode(); // recursive call
         //list.remove(list); // recursive call (FIXED with 7144488)

         /* Sets also suffer similar problems */
         Set s = Collections.synchronizedSet(new HashSet());
         s.add(s);
         //s.remove(s); // recursive call



On 22/02/12 14:22, Alan Bateman wrote:
> Sean - the fix looks okay to me but I assume there are other cases, 
> like with SynchronizedSet and hashCode for example. I don't know if 
> they are all fixable, at least not the hashCode cases.
>
> -Alan.



More information about the core-libs-dev mailing list