summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Sebastien Hertz <shertz@google.com> 2014-06-06 07:02:39 +0000
committer Gerrit Code Review <noreply-gerritcodereview@google.com> 2014-06-06 07:02:41 +0000
commit7a6b77f9a694ea4569fbf44493fdcaeea237a8be (patch)
tree6e1d4f1f4a9cf5de07395e3547f97849bf73163a
parent25c4f6a25b3de9b9d7ca5162f1629753a0b7f003 (diff)
parent4206eb5d86d3a2406361e59b2018152b2485cced (diff)
Merge "Fix crash in JDWP ReferenceType.SourceFile command"
-rw-r--r--runtime/debugger.cc7
-rw-r--r--runtime/mirror/class.cc5
-rw-r--r--runtime/proxy_test.cc4
3 files changed, 10 insertions, 6 deletions
diff --git a/runtime/debugger.cc b/runtime/debugger.cc
index 984f28723c..07cb9d17f4 100644
--- a/runtime/debugger.cc
+++ b/runtime/debugger.cc
@@ -1131,13 +1131,14 @@ JDWP::JdwpError Dbg::GetSignature(JDWP::RefTypeId class_id, std::string* signatu
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;
}
diff --git a/runtime/mirror/class.cc b/runtime/mirror/class.cc
index 4b02c0ff60..42ef68a59a 100644
--- a/runtime/mirror/class.cc
+++ b/runtime/mirror/class.cc
@@ -771,7 +771,10 @@ const char* Class::GetSourceFile() {
std::string descriptor(GetDescriptor());
const DexFile& dex_file = GetDexFile();
const DexFile::ClassDef* dex_class_def = GetClassDef();
- CHECK(dex_class_def != nullptr) << "No class def for class " << PrettyClass(this);
+ if (dex_class_def == nullptr) {
+ // Generated classes have no class def.
+ return nullptr;
+ }
return dex_file.GetSourceFile(*dex_class_def);
}
diff --git a/runtime/proxy_test.cc b/runtime/proxy_test.cc
index f38fb2155b..9724bcc50e 100644
--- a/runtime/proxy_test.cc
+++ b/runtime/proxy_test.cc
@@ -128,12 +128,12 @@ TEST_F(ProxyTest, ProxyClassHelper) {
ASSERT_TRUE(proxy_class->IsProxyClass());
ASSERT_TRUE(proxy_class->IsInitialized());
- // Check ClassHelper for proxy.
- EXPECT_EQ(proxy_class->NumDirectInterfaces(), 2U); // Interfaces$I and Interfaces$J.
+ EXPECT_EQ(2U, proxy_class->NumDirectInterfaces()); // Interfaces$I and Interfaces$J.
EXPECT_EQ(I.Get(), mirror::Class::GetDirectInterface(soa.Self(), proxy_class, 0));
EXPECT_EQ(J.Get(), mirror::Class::GetDirectInterface(soa.Self(), proxy_class, 1));
std::string proxy_class_descriptor(proxy_class->GetDescriptor());
EXPECT_STREQ("L$Proxy1234;", proxy_class_descriptor.c_str());
+ EXPECT_EQ(nullptr, proxy_class->GetSourceFile());
}
// Creates a proxy class and check FieldHelper works correctly.