United StatesChange Country, Oracle Worldwide Web Sites Communities I am a... I want to...
Bug ID: 5097856 (reflect) hashCode of TypeVariable causes StackOverflowError
5097856 : (reflect) hashCode of TypeVariable causes StackOverflowError

Details
Type:
Bug
Submit Date:
2004-09-07
Status:
Resolved
Updated Date:
2012-10-09
Project Name:
JDK
Resolved Date:
2004-09-24
Component:
core-libs
OS:
windows_xp
Sub-Component:
java.lang:reflect
CPU:
x86
Priority:
P4
Resolution:
Fixed
Affected Versions:
5.0
Fixed Versions:
5.0u1

Related Reports
Backport:

Sub Tasks

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
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;
+    }
 }
                                     
2004-09-26
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


                                     
2004-09-26
EVALUATION

Should be fixed.

###@###.### 2004-09-07
                                     
2004-09-07



Hardware and Software, Engineered to Work Together