summaryrefslogtreecommitdiff
path: root/runtime/mirror/array-inl.h
diff options
context:
space:
mode:
author Colin Cross <ccross@android.com> 2017-03-15 15:25:24 -0700
committer Colin Cross <ccross@android.com> 2017-03-15 21:09:47 -0700
commit32f53883993fbed5f08c1e13606e91acb3715d5d (patch)
tree21f85b6af385db5059898a771c9f99107e17668b /runtime/mirror/array-inl.h
parent7f4e4281f8889511a9d641ed1eb47f92692efbb1 (diff)
Fix sign extension issues
Fix sign extension issues when reading and writing pointers to int32_t fields. Cast the pointer to a uint32_t to check if it fits, and cast it through uintptr_t and uint32_t. Bug: 36281983 Test: m -j test-art-host with LibartImgHostBaseAddress == 0xa0000000 Change-Id: Idec99dcb5a47f2633a4f14c98af8e23c46dc7052
Diffstat (limited to 'runtime/mirror/array-inl.h')
-rw-r--r--runtime/mirror/array-inl.h4
1 files changed, 2 insertions, 2 deletions
diff --git a/runtime/mirror/array-inl.h b/runtime/mirror/array-inl.h
index f56226bd98..04c80c5cc0 100644
--- a/runtime/mirror/array-inl.h
+++ b/runtime/mirror/array-inl.h
@@ -402,8 +402,8 @@ inline T PointerArray::GetElementPtrSize(uint32_t idx, PointerSize ptr_size) {
return (T)static_cast<uintptr_t>(
AsLongArray<kVerifyFlags, kReadBarrierOption>()->GetWithoutChecks(idx));
}
- return (T)static_cast<uintptr_t>(
- AsIntArray<kVerifyFlags, kReadBarrierOption>()->GetWithoutChecks(idx));
+ return (T)static_cast<uintptr_t>(static_cast<uint32_t>(
+ AsIntArray<kVerifyFlags, kReadBarrierOption>()->GetWithoutChecks(idx)));
}
template<bool kTransactionActive, bool kUnchecked>