OSDN Git Service

ART: Add a null-check to unstarted-runtime
authorAndreas Gampe <agampe@google.com>
Tue, 14 Apr 2015 17:10:33 +0000 (10:10 -0700)
committerAndreas Gampe <agampe@google.com>
Tue, 14 Apr 2015 17:11:06 +0000 (10:11 -0700)
Check the string parameter to Class.forName before using it.

Bug: 19542228
Change-Id: I0d5c44122055c46e251451b1c0f687bbaf64d13e

runtime/interpreter/unstarted_runtime.cc

index 4fb634b..a971c1b 100644 (file)
@@ -123,7 +123,12 @@ static void UnstartedClassForName(
 static void UnstartedClassForNameLong(
     Thread* self, ShadowFrame* shadow_frame, JValue* result, size_t arg_offset)
     SHARED_LOCKS_REQUIRED(Locks::mutator_lock_) {
-  mirror::String* class_name = shadow_frame->GetVRegReference(arg_offset)->AsString();
+  mirror::Object* param = shadow_frame->GetVRegReference(arg_offset);
+  if (param == nullptr) {
+    AbortTransactionOrFail(self, "Null-pointer in Class.forName.");
+    return;
+  }
+  mirror::String* class_name = param->AsString();
   bool initialize_class = shadow_frame->GetVReg(arg_offset + 1) != 0;
   mirror::ClassLoader* class_loader =
       down_cast<mirror::ClassLoader*>(shadow_frame->GetVRegReference(arg_offset + 2));