6891959: HotSpot should not throw ClassFormatError if a class has a field with '>' and/or '<' in its name
Class file parser needs to look for and disallow '[' in names. Reviewed-by: coleenp, never
This commit is contained in:
parent
9b27c6cc6f
commit
e36f1e36eb
@ -4309,20 +4309,21 @@ int ClassFileParser::verify_legal_method_signature(symbolHandle name, symbolHand
|
||||
}
|
||||
|
||||
|
||||
// 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
|
||||
|
Loading…
Reference in New Issue
Block a user