src/share/vm/classfile/classFileParser.cpp
Index Unified diffs Context diffs Sdiffs Wdiffs Patch New Old Previous File Next File bug_8130183 Sdiff src/share/vm/classfile

src/share/vm/classfile/classFileParser.cpp

Print this page




2675   // 4-tuples of shorts of inner classes data and 2 shorts of enclosing
2676   // method data:
2677   //   [inner_class_info_index,
2678   //    outer_class_info_index,
2679   //    inner_name_index,
2680   //    inner_class_access_flags,
2681   //    ...
2682   //    enclosing_method_class_index,
2683   //    enclosing_method_method_index]
2684   int size = length * 4 + (parsed_enclosingmethod_attribute ? 2 : 0);
2685   Array<u2>* inner_classes = MetadataFactory::new_array<u2>(_loader_data, size, CHECK_0);
2686   _inner_classes = inner_classes;
2687 
2688   int index = 0;
2689   int cp_size = _cp->length();
2690   cfs->guarantee_more(8 * length, CHECK_0);  // 4-tuples of u2
2691   for (int n = 0; n < length; n++) {
2692     // Inner class index
2693     u2 inner_class_info_index = cfs->get_u2_fast();
2694     check_property(
2695       inner_class_info_index == 0 ||
2696         valid_klass_reference_at(inner_class_info_index),
2697       "inner_class_info_index %u has bad constant type in class file %s",
2698       inner_class_info_index, CHECK_0);
2699     // Outer class index
2700     u2 outer_class_info_index = cfs->get_u2_fast();
2701     check_property(
2702       outer_class_info_index == 0 ||
2703         valid_klass_reference_at(outer_class_info_index),
2704       "outer_class_info_index %u has bad constant type in class file %s",
2705       outer_class_info_index, CHECK_0);
2706     // Inner class name
2707     u2 inner_name_index = cfs->get_u2_fast();
2708     check_property(
2709       inner_name_index == 0 || valid_symbol_at(inner_name_index),
2710       "inner_name_index %u has bad constant type in class file %s",
2711       inner_name_index, CHECK_0);
2712     if (_need_verify) {
2713       guarantee_property(inner_class_info_index != outer_class_info_index,
2714                          "Class is both outer and inner class in class file %s", CHECK_0);
2715     }




2675   // 4-tuples of shorts of inner classes data and 2 shorts of enclosing
2676   // method data:
2677   //   [inner_class_info_index,
2678   //    outer_class_info_index,
2679   //    inner_name_index,
2680   //    inner_class_access_flags,
2681   //    ...
2682   //    enclosing_method_class_index,
2683   //    enclosing_method_method_index]
2684   int size = length * 4 + (parsed_enclosingmethod_attribute ? 2 : 0);
2685   Array<u2>* inner_classes = MetadataFactory::new_array<u2>(_loader_data, size, CHECK_0);
2686   _inner_classes = inner_classes;
2687 
2688   int index = 0;
2689   int cp_size = _cp->length();
2690   cfs->guarantee_more(8 * length, CHECK_0);  // 4-tuples of u2
2691   for (int n = 0; n < length; n++) {
2692     // Inner class index
2693     u2 inner_class_info_index = cfs->get_u2_fast();
2694     check_property(

2695       valid_klass_reference_at(inner_class_info_index),
2696       "inner_class_info_index %u has bad constant type in class file %s",
2697       inner_class_info_index, CHECK_0);
2698     // Outer class index
2699     u2 outer_class_info_index = cfs->get_u2_fast();
2700     check_property(
2701       outer_class_info_index == 0 ||
2702         valid_klass_reference_at(outer_class_info_index),
2703       "outer_class_info_index %u has bad constant type in class file %s",
2704       outer_class_info_index, CHECK_0);
2705     // Inner class name
2706     u2 inner_name_index = cfs->get_u2_fast();
2707     check_property(
2708       inner_name_index == 0 || valid_symbol_at(inner_name_index),
2709       "inner_name_index %u has bad constant type in class file %s",
2710       inner_name_index, CHECK_0);
2711     if (_need_verify) {
2712       guarantee_property(inner_class_info_index != outer_class_info_index,
2713                          "Class is both outer and inner class in class file %s", CHECK_0);
2714     }


src/share/vm/classfile/classFileParser.cpp
Index Unified diffs Context diffs Sdiffs Wdiffs Patch New Old Previous File Next File