comparison src/share/vm/oops/instanceKlass.cpp @ 13715:b270b954ba9a

Avoid segfault in InstanceKlass::oop_print_on's String special case when the value array is null.
author Gilles Duboscq <duboscq@ssw.jku.at>
date Mon, 20 Jan 2014 19:49:47 +0100
parents 02f27ecb4f3a
children d8041d695d19
comparison
equal deleted inserted replaced
13714:cffcb8e38c4c 13715:b270b954ba9a
3014 Klass::oop_print_on(obj, st); 3014 Klass::oop_print_on(obj, st);
3015 3015
3016 if (this == SystemDictionary::String_klass()) { 3016 if (this == SystemDictionary::String_klass()) {
3017 typeArrayOop value = java_lang_String::value(obj); 3017 typeArrayOop value = java_lang_String::value(obj);
3018 juint offset = java_lang_String::offset(obj); 3018 juint offset = java_lang_String::offset(obj);
3019 if (value != NULL) {
3019 juint length = java_lang_String::length(obj); 3020 juint length = java_lang_String::length(obj);
3020 if (value != NULL && 3021 if (value->is_typeArray() &&
3021 value->is_typeArray() &&
3022 offset <= (juint) value->length() && 3022 offset <= (juint) value->length() &&
3023 offset + length <= (juint) value->length()) { 3023 offset + length <= (juint) value->length()) {
3024 st->print(BULLET"string: "); 3024 st->print(BULLET"string: ");
3025 Handle h_obj(obj); 3025 Handle h_obj(obj);
3026 java_lang_String::print(h_obj, st); 3026 java_lang_String::print(h_obj, st);
3027 st->cr(); 3027 st->cr();
3028 if (!WizardMode) return; // that is enough 3028 if (!WizardMode) return; // that is enough
3029 } 3029 }
3030 }
3030 } 3031 }
3031 3032
3032 st->print_cr(BULLET"---- fields (total size %d words):", oop_size(obj)); 3033 st->print_cr(BULLET"---- fields (total size %d words):", oop_size(obj));
3033 FieldPrinter print_field(st, obj); 3034 FieldPrinter print_field(st, obj);
3034 do_nonstatic_fields(&print_field); 3035 do_nonstatic_fields(&print_field);