< prev index next >

src/share/vm/classfile/classFileParser.cpp

Print this page

        

*** 1264,1273 **** --- 1264,1277 ---- "Invalid Deprecated field attribute length %u in class file %s", attribute_length, CHECK); } } else if (_major_version >= JAVA_1_5_VERSION) { if (attribute_name == vmSymbols::tag_signature()) { + if (generic_signature_index != 0) { + classfile_parse_error( + "Multiple Signature attributes for field in class file %s", CHECK); + } if (attribute_length != 2) { classfile_parse_error( "Wrong size %u for field's Signature attribute in class file %s", attribute_length, CHECK); }
*** 2585,2594 **** --- 2589,2603 ---- "Invalid Deprecated method attribute length %u in class file %s", method_attribute_length, CHECK_NULL); } } else if (_major_version >= JAVA_1_5_VERSION) { if (method_attribute_name == vmSymbols::tag_signature()) { + if (generic_signature_index != 0) { + classfile_parse_error( + "Multiple Signature attributes for method in class file %s", + CHECK_NULL); + } if (method_attribute_length != 2) { classfile_parse_error( "Invalid Signature attribute length %u in class file %s", method_attribute_length, CHECK_NULL); }
*** 3232,3241 **** --- 3241,3251 ---- u2 attributes_count = cfs->get_u2_fast(); bool parsed_sourcefile_attribute = false; bool parsed_innerclasses_attribute = false; bool parsed_enclosingmethod_attribute = false; bool parsed_bootstrap_methods_attribute = false; + bool signature_exists = false; const u1* runtime_visible_annotations = NULL; int runtime_visible_annotations_length = 0; const u1* runtime_invisible_annotations = NULL; int runtime_invisible_annotations_length = 0; const u1* runtime_visible_type_annotations = NULL;
*** 3304,3318 **** --- 3314,3333 ---- "Invalid Deprecated classfile attribute length %u in class file %s", attribute_length, CHECK); } } else if (_major_version >= JAVA_1_5_VERSION) { if (tag == vmSymbols::tag_signature()) { + if (signature_exists) { + classfile_parse_error( + "Multiple Signature attributes in class file %s", CHECK); + } if (attribute_length != 2) { classfile_parse_error( "Wrong Signature attribute length %u in class file %s", attribute_length, CHECK); } + signature_exists = true; parse_classfile_signature_attribute(cfs, CHECK); } else if (tag == vmSymbols::tag_runtime_visible_annotations()) { if (runtime_visible_annotations != NULL) { classfile_parse_error( "Multiple RuntimeVisibleAnnotations attributes in class file %s", CHECK);
< prev index next >