Thu, 17 Jan 2013 11:39:48 +0100
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);