Fix crash in JDWP ReferenceType.SourceFile command
Updates Dbg::GetSourceFile to return ABSENT_INFORMATION error code when
Class::GetSourceFile returns nullptr. This happens if the class has no source
file information.
Updates Class:GetSourceFile to return nullptr for classes which have no
ClassDef item like generated classes. This allows to remove the IsProxyClass
test from Dbg::GetSourceFile. Adds this test in proxy_test.
Bug: 15426710
Change-Id: I019da4ced83778d5264484c43b225f8b5c95632e
diff --git a/runtime/debugger.cc b/runtime/debugger.cc
index 984f287..07cb9d1 100644
--- a/runtime/debugger.cc
+++ b/runtime/debugger.cc
@@ -1131,13 +1131,14 @@
JDWP::JdwpError Dbg::GetSourceFile(JDWP::RefTypeId class_id, std::string& result) {
JDWP::JdwpError status;
mirror::Class* c = DecodeClass(class_id, status);
- if (c == NULL) {
+ if (c == nullptr) {
return status;
}
- if (c->IsProxyClass()) {
+ const char* source_file = c->GetSourceFile();
+ if (source_file == nullptr) {
return JDWP::ERR_ABSENT_INFORMATION;
}
- result = c->GetSourceFile();
+ result = source_file;
return JDWP::ERR_NONE;
}