diff options
| author | 2017-03-15 15:25:24 -0700 | |
|---|---|---|
| committer | 2017-03-15 21:09:47 -0700 | |
| commit | 32f53883993fbed5f08c1e13606e91acb3715d5d (patch) | |
| tree | 21f85b6af385db5059898a771c9f99107e17668b /runtime/mirror/array-inl.h | |
| parent | 7f4e4281f8889511a9d641ed1eb47f92692efbb1 (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.h | 4 |
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> |