diff options
author | 2017-05-30 15:23:54 +0100 | |
---|---|---|
committer | 2017-05-30 16:42:22 +0100 | |
commit | 4b3d690c37dbea09906acd4a05f59c7674f9a2d0 (patch) | |
tree | c8f844f2dcc440c1a44a4ac51c4a0a3b3b42d872 /runtime/native/java_lang_VMClassLoader.cc | |
parent | cce39b5b4fc00ab9e6b4aaed1e7fa6928f0ec594 (diff) |
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
Diffstat (limited to 'runtime/native/java_lang_VMClassLoader.cc')
-rw-r--r-- | runtime/native/java_lang_VMClassLoader.cc | 17 |
1 files changed, 13 insertions, 4 deletions
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<const DexFile*>& 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<jstring> javaPath(env, env->NewStringUTF(location.c_str())); + if (javaPath.get() == nullptr) { + DCHECK(env->ExceptionCheck()); + return nullptr; + } + env->SetObjectArrayElement(array, i, javaPath.get()); } return array; } |