summaryrefslogtreecommitdiff
path: root/runtime/native/java_lang_VMClassLoader.cc
diff options
context:
space:
mode:
author Vladimir Marko <vmarko@google.com> 2017-05-30 15:23:54 +0100
committer Vladimir Marko <vmarko@google.com> 2017-05-30 16:42:22 +0100
commit4b3d690c37dbea09906acd4a05f59c7674f9a2d0 (patch)
treec8f844f2dcc440c1a44a4ac51c4a0a3b3b42d872 /runtime/native/java_lang_VMClassLoader.cc
parentcce39b5b4fc00ab9e6b4aaed1e7fa6928f0ec594 (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.cc17
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;
}