8006513: Null pointer in DefaultMethods::generate_default_methods when merging annotations

Thu, 17 Jan 2013 11:39:48 +0100

author
stefank
date
Thu, 17 Jan 2013 11:39:48 +0100
changeset 4456
2dce7c34c564
parent 4455
4967eb4f67a9
child 4457
59a58e20dc60

8006513: Null pointer in DefaultMethods::generate_default_methods when merging annotations
Reviewed-by: brutisso, jfranck

src/share/vm/classfile/defaultMethods.cpp file | annotate | diff | comparison | revisions
     1.1 --- a/src/share/vm/classfile/defaultMethods.cpp	Tue Jan 15 12:32:26 2013 -0800
     1.2 +++ b/src/share/vm/classfile/defaultMethods.cpp	Thu Jan 17 11:39:48 2013 +0100
     1.3 @@ -1285,13 +1285,15 @@
     1.4  
     1.5    enum { ANNOTATIONS, PARAMETERS, DEFAULTS, NUM_ARRAYS };
     1.6  
     1.7 -  Array<AnnotationArray*>* original_annots[NUM_ARRAYS];
     1.8 +  Array<AnnotationArray*>* original_annots[NUM_ARRAYS] = { NULL };
     1.9  
    1.10    Array<Method*>* original_methods = klass->methods();
    1.11    Annotations* annots = klass->annotations();
    1.12 -  original_annots[ANNOTATIONS] = annots->methods_annotations();
    1.13 -  original_annots[PARAMETERS]  = annots->methods_parameter_annotations();
    1.14 -  original_annots[DEFAULTS]    = annots->methods_default_annotations();
    1.15 +  if (annots != NULL) {
    1.16 +    original_annots[ANNOTATIONS] = annots->methods_annotations();
    1.17 +    original_annots[PARAMETERS]  = annots->methods_parameter_annotations();
    1.18 +    original_annots[DEFAULTS]    = annots->methods_default_annotations();
    1.19 +  }
    1.20  
    1.21    Array<int>* original_ordering = klass->method_ordering();
    1.22    Array<int>* merged_ordering = Universe::the_empty_int_array();
    1.23 @@ -1370,9 +1372,15 @@
    1.24  
    1.25    // Replace klass methods with new merged lists
    1.26    klass->set_methods(merged_methods);
    1.27 -  annots->set_methods_annotations(merged_annots[ANNOTATIONS]);
    1.28 -  annots->set_methods_parameter_annotations(merged_annots[PARAMETERS]);
    1.29 -  annots->set_methods_default_annotations(merged_annots[DEFAULTS]);
    1.30 +  if (annots != NULL) {
    1.31 +    annots->set_methods_annotations(merged_annots[ANNOTATIONS]);
    1.32 +    annots->set_methods_parameter_annotations(merged_annots[PARAMETERS]);
    1.33 +    annots->set_methods_default_annotations(merged_annots[DEFAULTS]);
    1.34 +  } else {
    1.35 +    assert(merged_annots[ANNOTATIONS] == NULL, "Must be");
    1.36 +    assert(merged_annots[PARAMETERS] == NULL, "Must be");
    1.37 +    assert(merged_annots[DEFAULTS] == NULL, "Must be");
    1.38 +  }
    1.39  
    1.40    ClassLoaderData* cld = klass->class_loader_data();
    1.41    MetadataFactory::free_array(cld, original_methods);

mercurial