diff options
author | 2014-06-06 07:02:39 +0000 | |
---|---|---|
committer | 2014-06-06 07:02:41 +0000 | |
commit | 7a6b77f9a694ea4569fbf44493fdcaeea237a8be (patch) | |
tree | 6e1d4f1f4a9cf5de07395e3547f97849bf73163a | |
parent | 25c4f6a25b3de9b9d7ca5162f1629753a0b7f003 (diff) | |
parent | 4206eb5d86d3a2406361e59b2018152b2485cced (diff) |
Merge "Fix crash in JDWP ReferenceType.SourceFile command"
-rw-r--r-- | runtime/debugger.cc | 7 | ||||
-rw-r--r-- | runtime/mirror/class.cc | 5 | ||||
-rw-r--r-- | runtime/proxy_test.cc | 4 |
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. |