From 32f53883993fbed5f08c1e13606e91acb3715d5d Mon Sep 17 00:00:00 2001 From: Colin Cross Date: Wed, 15 Mar 2017 15:25:24 -0700 Subject: 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 --- runtime/mirror/array-inl.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'runtime/mirror/array-inl.h') 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( AsLongArray()->GetWithoutChecks(idx)); } - return (T)static_cast( - AsIntArray()->GetWithoutChecks(idx)); + return (T)static_cast(static_cast( + AsIntArray()->GetWithoutChecks(idx))); } template -- cgit v1.2.3-59-g8ed1b