comparison src/share/vm/prims/jni.cpp @ 23746:0dceb4846c8c

8031427: AllocObject and Unsafe.allocateInstance segfault for primitive types Summary: The fix just throws an InstantiationException if the Klass is NULL. Reviewed-by: coleenp, twisti, jrose Contributed-by: gdub <duboscq@ssw.jku.at>
author gdub
date Fri, 26 Aug 2016 13:37:53 -0700
parents b5f3a471e646
children f13e777eb255
comparison
equal deleted inserted replaced
23745:a074ae16281d 23746:0dceb4846c8c
1407 } 1407 }
1408 1408
1409 1409
1410 static instanceOop alloc_object(jclass clazz, TRAPS) { 1410 static instanceOop alloc_object(jclass clazz, TRAPS) {
1411 KlassHandle k(THREAD, java_lang_Class::as_Klass(JNIHandles::resolve_non_null(clazz))); 1411 KlassHandle k(THREAD, java_lang_Class::as_Klass(JNIHandles::resolve_non_null(clazz)));
1412 if (k == NULL) {
1413 ResourceMark rm(THREAD);
1414 THROW_(vmSymbols::java_lang_InstantiationException(), NULL);
1415 }
1412 k()->check_valid_for_instantiation(false, CHECK_NULL); 1416 k()->check_valid_for_instantiation(false, CHECK_NULL);
1413 InstanceKlass::cast(k())->initialize(CHECK_NULL); 1417 InstanceKlass::cast(k())->initialize(CHECK_NULL);
1414 instanceOop ih = InstanceKlass::cast(k())->allocate_instance(THREAD); 1418 instanceOop ih = InstanceKlass::cast(k())->allocate_instance(THREAD);
1415 return ih; 1419 return ih;
1416 } 1420 }