Integrated: 8343064: ClassFormatError: Illegal class name from InnerClassLambdaMetafactory
Chen Liang
liach at openjdk.org
Thu Nov 14 17:59:33 UTC 2024
On Tue, 5 Nov 2024 18:29:52 GMT, Chen Liang <liach at openjdk.org> wrote:
> After the ClassFile API migration, when serializable lambdas are requested for hidden class callers, illegal class name is generated for the serialization methods, which previously had legal yet unusable class names, as hidden classes cannot be described by a `CONSTANT_Class_info`.
>
> This patch restores a similar older behavior of using legal yet unusable class names. Previously, the invalid `.` in hidden class names was replaced by a `/` as if a package separator; this patch changes it to a `_` like that in the generated lambda's class name.
>
> The bug report shows some unintended and erroneous usages of `LambdaMetafactory`. To clarify and to persuade against misuse, I added a paragraph of API notes to `LambdaMetafactory`, describing the impact of this API being designed to support Java language features. In particular, I used the scenario where people assumed LMf generates weak hidden classes, which happened in this issue report and in #12493, that misuse can lead to resource leaks.
This pull request has now been integrated.
Changeset: 681a57f9
Author: Chen Liang <liach at openjdk.org>
URL: https://git.openjdk.org/jdk/commit/681a57f96099a4e434fef0f37fa9cd248357791f
Stats: 116 lines in 3 files changed: 113 ins; 0 del; 3 mod
8343064: ClassFormatError: Illegal class name from InnerClassLambdaMetafactory
Reviewed-by: jvernee
-------------
PR: https://git.openjdk.org/jdk/pull/21912
More information about the core-libs-dev
mailing list