I'm checking this in on the generics branch. This fixes PR 25189.
Tom 2006-03-27 Tom Tromey <[EMAIL PROTECTED]> PR classpath/25189: * java/lang/Enum.java (valueOf): Ensure that the named field is an enum constant. (compareTo): Check class of enum. Index: java/lang/Enum.java =================================================================== RCS file: /cvsroot/classpath/classpath/java/lang/Attic/Enum.java,v retrieving revision 1.1.2.7 diff -u -r1.1.2.7 Enum.java --- java/lang/Enum.java 28 Sep 2005 17:50:20 -0000 1.1.2.7 +++ java/lang/Enum.java 28 Mar 2006 18:45:42 -0000 @@ -38,6 +38,7 @@ package java.lang; import java.io.Serializable; +import java.lang.reflect.Field; /** * @since 1.5 @@ -76,7 +77,10 @@ try { - return (S) etype.getDeclaredField(s).get(null); + Field f = etype.getDeclaredField(s); + if (! f.isEnumConstant()) + throw new IllegalArgumentException(s); + return (S) f.get(null); } catch (NoSuchFieldException exception) { @@ -106,6 +110,8 @@ public final int compareTo(T e) { + if (getDeclaringClass() != e.getDeclaringClass()) + throw new ClassCastException(); return ordinal - e.ordinal; }