diff options
author | 2014-08-22 20:34:16 +0000 | |
---|---|---|
committer | 2014-08-22 20:34:16 +0000 | |
commit | 1dbc3a918612e9ce01f8b05b5ef5f4cbb34e74d0 (patch) | |
tree | 8c222c9f85ac9f14a14997fbbf5522f383096c6d | |
parent | 19c62d5e819519932aa7dff87a52f77815c64e65 (diff) | |
parent | 695c5982eeddee18c643cc2f94c9d78fa75599ab (diff) |
Merge "ART: Reject field accesses to non-reference vregs."
-rw-r--r-- | runtime/verifier/method_verifier.cc | 5 |
1 files changed, 5 insertions, 0 deletions
diff --git a/runtime/verifier/method_verifier.cc b/runtime/verifier/method_verifier.cc index e2a3335a79..60194532a6 100644 --- a/runtime/verifier/method_verifier.cc +++ b/runtime/verifier/method_verifier.cc @@ -3652,6 +3652,11 @@ mirror::ArtField* MethodVerifier::GetInstanceField(RegType& obj_type, int field_ } else if (obj_type.IsZero()) { // Cannot infer and check type, however, access will cause null pointer exception return field; + } else if (!obj_type.IsReferenceTypes()) { + // Trying to read a field from something that isn't a reference + Fail(VERIFY_ERROR_BAD_CLASS_HARD) << "instance field access on object that has " + << "non-reference type " << obj_type; + return NULL; } else { mirror::Class* klass = field->GetDeclaringClass(); RegType& field_klass = |