6891959: HotSpot should not throw ClassFormatError if a class has a field with '>' and/or '<' in its name
Summary: Class file parser needs to look for and disallow '[' in names.
Reviewed-by: coleenp, never
--- a/hotspot/src/share/vm/classfile/classFileParser.cpp Mon Oct 25 13:31:55 2010 -0400
+++ b/hotspot/src/share/vm/classfile/classFileParser.cpp Tue Oct 26 14:08:49 2010 -0400
@@ -4309,20 +4309,21 @@
}
-// Unqualified names may not contain the characters '.', ';', or '/'.
-// Method names also may not contain the characters '<' or '>', unless <init> or <clinit>.
-// Note that method names may not be <init> or <clinit> in this method.
-// Because these names have been checked as special cases before calling this method
-// in verify_legal_method_name.
-bool ClassFileParser::verify_unqualified_name(char* name, unsigned int length, int type) {
+// Unqualified names may not contain the characters '.', ';', '[', or '/'.
+// Method names also may not contain the characters '<' or '>', unless <init>
+// or <clinit>. Note that method names may not be <init> or <clinit> in this
+// method. Because these names have been checked as special cases before
+// calling this method in verify_legal_method_name.
+bool ClassFileParser::verify_unqualified_name(
+ char* name, unsigned int length, int type) {
jchar ch;
for (char* p = name; p != name + length; ) {
ch = *p;
if (ch < 128) {
p++;
- if (ch == '.' || ch == ';') {
- return false; // do not permit '.' or ';'
+ if (ch == '.' || ch == ';' || ch == '[' ) {
+ return false; // do not permit '.', ';', or '['
}
if (type != LegalClass && ch == '/') {
return false; // do not permit '/' unless it's class name