src/share/vm/prims/unsafe.cpp
Index Unified diffs Context diffs Sdiffs Patch New Old Previous File Next File
*** old/src/share/vm/prims/unsafe.cpp	Fri Sep  5 16:06:22 2014
--- new/src/share/vm/prims/unsafe.cpp	Fri Sep  5 16:06:20 2014

*** 951,969 **** --- 951,977 ---- ThreadToNativeFromVM ttnfv(thread); return Unsafe_DefineClass_impl(env, name, data, offset, length, loader, pd); } UNSAFE_END + static jobject get_class_loader(JNIEnv* env, jclass cls) { + if (java_lang_Class::is_primitive(JNIHandles::resolve_non_null(cls))) { + return NULL; + } + Klass* k = java_lang_Class::as_Klass(JNIHandles::resolve_non_null(cls)); + oop loader = k->class_loader(); + return JNIHandles::make_local(env, loader); + } UNSAFE_ENTRY(jclass, Unsafe_DefineClass0(JNIEnv *env, jobject unsafe, jstring name, jbyteArray data, int offset, int length)) UnsafeWrapper("Unsafe_DefineClass"); { ThreadToNativeFromVM ttnfv(thread); int depthFromDefineClass0 = 1; jclass caller = JVM_GetCallerClass(env, depthFromDefineClass0); ! jobject loader = (caller == NULL) ? NULL : JVM_GetClassLoader(env, caller); ! jobject loader = (caller == NULL) ? NULL : get_class_loader(env, caller); jobject pd = (caller == NULL) ? NULL : JVM_GetProtectionDomain(env, caller); return Unsafe_DefineClass_impl(env, name, data, offset, length, loader, pd); } UNSAFE_END

src/share/vm/prims/unsafe.cpp
Index Unified diffs Context diffs Sdiffs Patch New Old Previous File Next File