JDK-5097856 : (reflect) hashCode of TypeVariable causes StackOverflowError
  • Type: Bug
  • Component: core-libs
  • Sub-Component: java.lang:reflect
  • Affected Version: 5.0
  • Priority: P4
  • Status: Resolved
  • Resolution: Fixed
  • OS: windows_xp
  • CPU: x86
  • Submitted: 2004-09-07
  • Updated: 2012-10-09
  • Resolved: 2004-09-24
The Version table provides details related to the release that this issue/RFE will be addressed.

Unresolved : Release in which this issue/RFE will be addressed.
Resolved: Release in which this issue/RFE has been resolved.
Fixed : Release in which this issue/RFE has been fixed. The release containing this fix may be available for download as an Early Access Release or a General Availability Release.

To download the current JDK release, click here.
Other JDK 6
5.0u1 01Fixed 6Fixed
Description
Name: rmT116609			Date: 09/07/2004


FULL PRODUCT VERSION :
java version "1.5.0-rc"
Java(TM) 2 Runtime Environment, Standard Edition (build 1.5.0-rc-b63)
Java HotSpot(TM) Client VM (build 1.5.0-rc-b63, mixed mode, sharing)

ADDITIONAL OS VERSION INFORMATION :
Microsoft Windows XP [Version 5.1.2600]
(Japanese)

A DESCRIPTION OF THE PROBLEM :
The following code causes StackOverflowError.

import java.lang.reflect.*;

public class Main<T extends Comparable<? super T>> {
    public static void main(String[] args) {
        Class<?> clazz = Main.class;
        for (TypeVariable<?> var : clazz.getTypeParameters()) {
            var.hashCode();
        }
    }
}


Exception in thread "main" java.lang.StackOverflowError
        at sun.reflect.generics.reflectiveObjects.TypeVariableImpl.getBounds(TypeVariableImpl.java:99)
        at sun.reflect.generics.reflectiveObjects.TypeVariableImpl.hashCode(TypeVariableImpl.java:168)
        at java.util.Arrays.hashCode(Arrays.java:2642)
        at sun.reflect.generics.reflectiveObjects.WildcardTypeImpl.hashCode(WildcardTypeImpl.java:214)
        at java.util.Arrays.hashCode(Arrays.java:2642)
        at sun.reflect.generics.reflectiveObjects.ParameterizedTypeImpl.hashCode(ParameterizedTypeImpl.java:190)
        at java.util.Arrays.hashCode(Arrays.java:2642)
        at sun.reflect.generics.reflectiveObjects.TypeVariableImpl.hashCode(TypeVariableImpl.java:168)
        at java.util.Arrays.hashCode(Arrays.java:2642)
        at sun.reflect.generics.reflectiveObjects.WildcardTypeImpl.hashCode(WildcardTypeImpl.java:214)
        at java.util.Arrays.hashCode(Arrays.java:2642)
        at sun.reflect.generics.reflectiveObjects.ParameterizedTypeImpl.hashCode(ParameterizedTypeImpl.java:190)
        at java.util.Arrays.hashCode(Arrays.java:2642)
        at sun.reflect.generics.reflectiveObjects.TypeVariableImpl.hashCode(TypeVariableImpl.java:168)
        at java.util.Arrays.hashCode(Arrays.java:2642)
        at sun.reflect.generics.reflectiveObjects.WildcardTypeImpl.hashCode(WildcardTypeImpl.java:214)
        at java.util.Arrays.hashCode(Arrays.java:2642)
        at sun.reflect.generics.reflectiveObjects.ParameterizedTypeImpl.hashCode(ParameterizedTypeImpl.java:190)
:
:
:



REPRODUCIBILITY :
This bug can be reproduced always.
(Incident Review ID: 301856) 
======================================================================

Comments
CONVERTED DATA BugTraq+ Release Management Values COMMIT TO FIX: 1.5.0_01 mustang FIXED IN: 1.5.0_01 mustang INTEGRATED IN: 1.5.0_01 mustang
26-09-2004

SUGGESTED FIX --- /tmp/geta7347 2004-09-07 11:18:52.808419672 -0700 +++ src/share/classes/sun/reflect/generics/reflectiveObjects/TypeVariableImpl.java 2004-09-07 11:10:53.965214904 -0700 @@ -163,9 +163,14 @@ return java.util.Arrays.equals(thisBounds, thatBounds); } + private int hashCode; @Override public int hashCode() { - return java.util.Arrays.hashCode(this.getBounds()) ^ + if (hashCode == 0) { + hashCode = super.hashCode(); + hashCode = java.util.Arrays.hashCode(this.getBounds()) ^ genericDeclaration.hashCode() ^ name.hashCode(); } + return hashCode; + } }
26-09-2004

EVALUATION Should be fixed. ###@###.### 2004-09-07
07-09-2004