Check jclasses are actually classes in ti_redefine.
There were a few places where we decoded jclasses and cast them to
mirror::Class without actually checking that they are classes first.
This makes us correctly return an INVALID_CLASS error if a non-class
jobject is given.
Test: ./test.py --host -j80
Change-Id: I4cee80726409019ff174333b59a5e4395c069ff6
diff --git a/openjdkjvmti/ti_redefine.cc b/openjdkjvmti/ti_redefine.cc
index eb4bada..e51ae4d 100644
--- a/openjdkjvmti/ti_redefine.cc
+++ b/openjdkjvmti/ti_redefine.cc
@@ -240,7 +240,7 @@
art::ScopedObjectAccess soa(self);
art::StackHandleScope<1> hs(self);
art::ObjPtr<art::mirror::Object> obj(self->DecodeJObject(klass));
- if (obj.IsNull()) {
+ if (obj.IsNull() || !obj->IsClass()) {
return ERR(INVALID_CLASS);
}
art::Handle<art::mirror::Class> h_klass(hs.NewHandle(obj->AsClass()));
@@ -256,7 +256,7 @@
art::ScopedObjectAccess soa(self);
art::StackHandleScope<1> hs(self);
art::ObjPtr<art::mirror::Object> obj(self->DecodeJObject(klass));
- if (obj.IsNull()) {
+ if (obj.IsNull() || !obj->IsClass()) {
return ERR(INVALID_CLASS);
}
art::Handle<art::mirror::Class> h_klass(hs.NewHandle(obj->AsClass()));