From 4b3d690c37dbea09906acd4a05f59c7674f9a2d0 Mon Sep 17 00:00:00 2001 From: Vladimir Marko Date: Tue, 30 May 2017 15:23:54 +0100 Subject: Fix OOME handling in VMClassLoader.getBootClassPathEntries(). Propagate the OOME out of the native method. Test: m test-art-host Test: testrunner.py --host Bug: 62185851 Change-Id: Ia0bc2ecd8fe1be6ad6febee373a1531de38f85cf --- runtime/native/java_lang_VMClassLoader.cc | 17 +++++++++++++---- 1 file changed, 13 insertions(+), 4 deletions(-) (limited to 'runtime/native/java_lang_VMClassLoader.cc') diff --git a/runtime/native/java_lang_VMClassLoader.cc b/runtime/native/java_lang_VMClassLoader.cc index a9ba33ecc1..32cc98ec05 100644 --- a/runtime/native/java_lang_VMClassLoader.cc +++ b/runtime/native/java_lang_VMClassLoader.cc @@ -22,6 +22,7 @@ #include "mirror/object-inl.h" #include "obj_ptr.h" #include "scoped_fast_native_object_access-inl.h" +#include "ScopedLocalRef.h" #include "ScopedUtfChars.h" #include "well_known_classes.h" #include "zip_archive.h" @@ -122,16 +123,24 @@ static jclass VMClassLoader_findLoadedClass(JNIEnv* env, jclass, jobject javaLoa static jobjectArray VMClassLoader_getBootClassPathEntries(JNIEnv* env, jclass) { const std::vector& path = Runtime::Current()->GetClassLinker()->GetBootClassPath(); - jclass stringClass = env->FindClass("java/lang/String"); - jobjectArray array = env->NewObjectArray(path.size(), stringClass, nullptr); + jobjectArray array = + env->NewObjectArray(path.size(), WellKnownClasses::java_lang_String, nullptr); + if (array == nullptr) { + DCHECK(env->ExceptionCheck()); + return nullptr; + } for (size_t i = 0; i < path.size(); ++i) { const DexFile* dex_file = path[i]; // For multidex locations, e.g., x.jar:classes2.dex, we want to look into x.jar. const std::string& location(dex_file->GetBaseLocation()); - jstring javaPath = env->NewStringUTF(location.c_str()); - env->SetObjectArrayElement(array, i, javaPath); + ScopedLocalRef javaPath(env, env->NewStringUTF(location.c_str())); + if (javaPath.get() == nullptr) { + DCHECK(env->ExceptionCheck()); + return nullptr; + } + env->SetObjectArrayElement(array, i, javaPath.get()); } return array; } -- cgit v1.2.3-59-g8ed1b