Skip to content

Commit fc08af5

Browse files
author
Dan Smith
committed
8174222: LambdaMetafactory: validate inputs and improve documentation
Reviewed-by: mchung
1 parent 5e557d8 commit fc08af5

File tree

8 files changed

+801
-437
lines changed

8 files changed

+801
-437
lines changed

src/hotspot/share/include/jvm.h

+10-10
Original file line numberDiff line numberDiff line change
@@ -170,20 +170,20 @@ JVM_InitializeFromArchive(JNIEnv* env, jclass cls);
170170

171171
JNIEXPORT void JNICALL
172172
JVM_RegisterLambdaProxyClassForArchiving(JNIEnv* env, jclass caller,
173-
jstring invokedName,
174-
jobject invokedType,
175-
jobject methodType,
176-
jobject implMethodMember,
177-
jobject instantiatedMethodType,
173+
jstring interfaceMethodName,
174+
jobject factoryType,
175+
jobject interfaceMethodType,
176+
jobject implementationMember,
177+
jobject dynamicMethodType,
178178
jclass lambdaProxyClass);
179179

180180
JNIEXPORT jclass JNICALL
181181
JVM_LookupLambdaProxyClassFromArchive(JNIEnv* env, jclass caller,
182-
jstring invokedName,
183-
jobject invokedType,
184-
jobject methodType,
185-
jobject implMethodMember,
186-
jobject instantiatedMethodType);
182+
jstring interfaceMethodName,
183+
jobject factoryType,
184+
jobject interfaceMethodType,
185+
jobject implementationMember,
186+
jobject dynamicMethodType);
187187

188188
JNIEXPORT jboolean JNICALL
189189
JVM_IsCDSDumpingEnabled(JNIEnv* env);

src/hotspot/share/prims/jvm.cpp

+38-38
Original file line numberDiff line numberDiff line change
@@ -3520,11 +3520,11 @@ JVM_END
35203520

35213521
JVM_ENTRY(void, JVM_RegisterLambdaProxyClassForArchiving(JNIEnv* env,
35223522
jclass caller,
3523-
jstring invokedName,
3524-
jobject invokedType,
3525-
jobject methodType,
3526-
jobject implMethodMember,
3527-
jobject instantiatedMethodType,
3523+
jstring interfaceMethodName,
3524+
jobject factoryType,
3525+
jobject interfaceMethodType,
3526+
jobject implementationMember,
3527+
jobject dynamicMethodType,
35283528
jclass lambdaProxyClass))
35293529
#if INCLUDE_CDS
35303530
if (!Arguments::is_dumping_archive()) {
@@ -3544,39 +3544,39 @@ JVM_ENTRY(void, JVM_RegisterLambdaProxyClassForArchiving(JNIEnv* env,
35443544
assert(lambda_ik->is_hidden(), "must be a hidden class");
35453545
assert(!lambda_ik->is_non_strong_hidden(), "expected a strong hidden class");
35463546

3547-
Symbol* invoked_name = NULL;
3548-
if (invokedName != NULL) {
3549-
invoked_name = java_lang_String::as_symbol(JNIHandles::resolve_non_null(invokedName));
3547+
Symbol* interface_method_name = NULL;
3548+
if (interfaceMethodName != NULL) {
3549+
interface_method_name = java_lang_String::as_symbol(JNIHandles::resolve_non_null(interfaceMethodName));
35503550
}
3551-
Handle invoked_type_oop(THREAD, JNIHandles::resolve_non_null(invokedType));
3552-
Symbol* invoked_type = java_lang_invoke_MethodType::as_signature(invoked_type_oop(), true);
3551+
Handle factory_type_oop(THREAD, JNIHandles::resolve_non_null(factoryType));
3552+
Symbol* factory_type = java_lang_invoke_MethodType::as_signature(factory_type_oop(), true);
35533553

3554-
Handle method_type_oop(THREAD, JNIHandles::resolve_non_null(methodType));
3555-
Symbol* method_type = java_lang_invoke_MethodType::as_signature(method_type_oop(), true);
3554+
Handle interface_method_type_oop(THREAD, JNIHandles::resolve_non_null(interfaceMethodType));
3555+
Symbol* interface_method_type = java_lang_invoke_MethodType::as_signature(interface_method_type_oop(), true);
35563556

3557-
Handle impl_method_member_oop(THREAD, JNIHandles::resolve_non_null(implMethodMember));
3558-
assert(java_lang_invoke_MemberName::is_method(impl_method_member_oop()), "must be");
3559-
Method* m = java_lang_invoke_MemberName::vmtarget(impl_method_member_oop());
3557+
Handle implementation_member_oop(THREAD, JNIHandles::resolve_non_null(implementationMember));
3558+
assert(java_lang_invoke_MemberName::is_method(implementation_member_oop()), "must be");
3559+
Method* m = java_lang_invoke_MemberName::vmtarget(implementation_member_oop());
35603560

3561-
Handle instantiated_method_type_oop(THREAD, JNIHandles::resolve_non_null(instantiatedMethodType));
3562-
Symbol* instantiated_method_type = java_lang_invoke_MethodType::as_signature(instantiated_method_type_oop(), true);
3561+
Handle dynamic_method_type_oop(THREAD, JNIHandles::resolve_non_null(dynamicMethodType));
3562+
Symbol* dynamic_method_type = java_lang_invoke_MethodType::as_signature(dynamic_method_type_oop(), true);
35633563

3564-
SystemDictionaryShared::add_lambda_proxy_class(caller_ik, lambda_ik, invoked_name, invoked_type,
3565-
method_type, m, instantiated_method_type, THREAD);
3564+
SystemDictionaryShared::add_lambda_proxy_class(caller_ik, lambda_ik, interface_method_name, factory_type,
3565+
interface_method_type, m, dynamic_method_type, THREAD);
35663566
#endif // INCLUDE_CDS
35673567
JVM_END
35683568

35693569
JVM_ENTRY(jclass, JVM_LookupLambdaProxyClassFromArchive(JNIEnv* env,
35703570
jclass caller,
3571-
jstring invokedName,
3572-
jobject invokedType,
3573-
jobject methodType,
3574-
jobject implMethodMember,
3575-
jobject instantiatedMethodType))
3571+
jstring interfaceMethodName,
3572+
jobject factoryType,
3573+
jobject interfaceMethodType,
3574+
jobject implementationMember,
3575+
jobject dynamicMethodType))
35763576
#if INCLUDE_CDS
35773577

3578-
if (invokedName == NULL || invokedType == NULL || methodType == NULL ||
3579-
implMethodMember == NULL || instantiatedMethodType == NULL) {
3578+
if (interfaceMethodName == NULL || factoryType == NULL || interfaceMethodType == NULL ||
3579+
implementationMember == NULL || dynamicMethodType == NULL) {
35803580
THROW_(vmSymbols::java_lang_NullPointerException(), NULL);
35813581
}
35823582

@@ -3587,22 +3587,22 @@ JVM_ENTRY(jclass, JVM_LookupLambdaProxyClassFromArchive(JNIEnv* env,
35873587
return NULL;
35883588
}
35893589

3590-
Symbol* invoked_name = java_lang_String::as_symbol(JNIHandles::resolve_non_null(invokedName));
3591-
Handle invoked_type_oop(THREAD, JNIHandles::resolve_non_null(invokedType));
3592-
Symbol* invoked_type = java_lang_invoke_MethodType::as_signature(invoked_type_oop(), true);
3590+
Symbol* interface_method_name = java_lang_String::as_symbol(JNIHandles::resolve_non_null(interfaceMethodName));
3591+
Handle factory_type_oop(THREAD, JNIHandles::resolve_non_null(factoryType));
3592+
Symbol* factory_type = java_lang_invoke_MethodType::as_signature(factory_type_oop(), true);
35933593

3594-
Handle method_type_oop(THREAD, JNIHandles::resolve_non_null(methodType));
3595-
Symbol* method_type = java_lang_invoke_MethodType::as_signature(method_type_oop(), true);
3594+
Handle interface_method_type_oop(THREAD, JNIHandles::resolve_non_null(interfaceMethodType));
3595+
Symbol* interface_method_type = java_lang_invoke_MethodType::as_signature(interface_method_type_oop(), true);
35963596

3597-
Handle impl_method_member_oop(THREAD, JNIHandles::resolve_non_null(implMethodMember));
3598-
assert(java_lang_invoke_MemberName::is_method(impl_method_member_oop()), "must be");
3599-
Method* m = java_lang_invoke_MemberName::vmtarget(impl_method_member_oop());
3597+
Handle implementation_member_oop(THREAD, JNIHandles::resolve_non_null(implementationMember));
3598+
assert(java_lang_invoke_MemberName::is_method(implementation_member_oop()), "must be");
3599+
Method* m = java_lang_invoke_MemberName::vmtarget(implementation_member_oop());
36003600

3601-
Handle instantiated_method_type_oop(THREAD, JNIHandles::resolve_non_null(instantiatedMethodType));
3602-
Symbol* instantiated_method_type = java_lang_invoke_MethodType::as_signature(instantiated_method_type_oop(), true);
3601+
Handle dynamic_method_type_oop(THREAD, JNIHandles::resolve_non_null(dynamicMethodType));
3602+
Symbol* dynamic_method_type = java_lang_invoke_MethodType::as_signature(dynamic_method_type_oop(), true);
36033603

3604-
InstanceKlass* lambda_ik = SystemDictionaryShared::get_shared_lambda_proxy_class(caller_ik, invoked_name, invoked_type,
3605-
method_type, m, instantiated_method_type);
3604+
InstanceKlass* lambda_ik = SystemDictionaryShared::get_shared_lambda_proxy_class(caller_ik, interface_method_name, factory_type,
3605+
interface_method_type, m, dynamic_method_type);
36063606
jclass jcls = NULL;
36073607
if (lambda_ik != NULL) {
36083608
InstanceKlass* loaded_lambda = SystemDictionaryShared::prepare_shared_lambda_proxy_class(lambda_ik, caller_ik, THREAD);

0 commit comments

Comments
 (0)