Fix debugger crashes in presence of proxy objects.
Fix ClassHelper::NumDirectInterfaces to use IfTable::Count instead of the
iftable array's length (which is twice the interface count). This happens when
processing ReferenceType::Interfaces command and was causing a crash.
Return ABSENT_INFORMATION error code when we're asked for the source file of a
proxy class. Otherwise we call ClassHelper::GetSourceFile which expect the
class has a corresponding ClassDef item in the DEX file which is not true for
proxy classes.
Add new proxy_test to check ClassHelper works correctly with proxy classes.
Bug: 13426918
Change-Id: I5c1212b1a697dd7dc1ab18e99552ee113c533a5a
diff --git a/runtime/debugger.cc b/runtime/debugger.cc
index 7e2dfd2..1276cd9 100644
--- a/runtime/debugger.cc
+++ b/runtime/debugger.cc
@@ -1025,6 +1025,9 @@
if (c == NULL) {
return status;
}
+ if (c->IsProxyClass()) {
+ return JDWP::ERR_ABSENT_INFORMATION;
+ }
result = ClassHelper(c).GetSourceFile();
return JDWP::ERR_NONE;
}