From bdd06aadab6214d2378b7d5078f92bfb14e7e3dc Mon Sep 17 00:00:00 2001 From: Carl Shapiro Date: Mon, 18 Apr 2011 15:08:21 -0700 Subject: [PATCH] Fix a type error in the allocation of non-moving arrays. Originally, non-moving arrays were allocated with dvmAllocObjectArray. However, dvmAllocObjectArray does not respect the width of the user supplied element class and substitutes a hard coded value of 4 bytes. This change replaces dvmAllocObjectArray with dvmAllocArrayByClass. dvmAllocArrayByClass consults the element class for its width when computing the storage size for the array being allocated. Bug: 4309030 Change-Id: I9cfe1b62ea61f03e46f44ad2be0d1cce1bef7cdd --- vm/native/dalvik_system_VMRuntime.c | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/vm/native/dalvik_system_VMRuntime.c b/vm/native/dalvik_system_VMRuntime.c index fec24be38..eb086a8a6 100644 --- a/vm/native/dalvik_system_VMRuntime.c +++ b/vm/native/dalvik_system_VMRuntime.c @@ -128,7 +128,6 @@ static void Dalvik_dalvik_system_VMRuntime_newNonMovableArray(const u4* args, { ClassObject* elementClass = (ClassObject*) args[1]; int length = args[2]; - ArrayObject* newArray; if (elementClass == NULL) { dvmThrowException("Ljava/lang/NullPointerException;", NULL); @@ -142,7 +141,10 @@ static void Dalvik_dalvik_system_VMRuntime_newNonMovableArray(const u4* args, // TODO: right now, we don't have a copying collector, so there's no need // to do anything special here, but we ought to pass the non-movability // through to the allocator. - newArray = dvmAllocObjectArray(elementClass, length, ALLOC_DEFAULT); + ClassObject* arrayClass = dvmFindArrayClassForElement(elementClass); + ArrayObject* newArray = dvmAllocArrayByClass(arrayClass, + length, + ALLOC_DEFAULT); if (newArray == NULL) { assert(dvmCheckException(dvmThreadSelf())); RETURN_VOID(); -- 2.11.0