RFR: 8297727: Forcing LF interpretation lead to StackOverflowError in reflection code

Jorn Vernee jvernee at openjdk.org
Wed Apr 30 13:52:49 UTC 2025


On Wed, 23 Apr 2025 22:39:40 GMT, Chen Liang <liach at openjdk.org> wrote:

> When LambdaForms are interpreted, so are field lambda forms. When this happens, we may get into an infinite recursion due to field lambda forms using `MethodHandleStatics.UNSAFE` via field lambda form.
> 
> I think the best solution here is to always eagerly compile field DMH forms - we already do so for all method forms, and there is a finite number of field forms, mostly pregenerated. The reference with cast form is erroneously missed, and it is actually the culprit of this issue. Will pregenerate that in another patch.

Marked as reviewed by jvernee (Reviewer).

src/java.base/share/classes/java/lang/invoke/DirectMethodHandle.java line 217:

> 215:         }
> 216:         LambdaForm lform = preparedLambdaForm(mtype, which);
> 217:         maybeCompile(lform, m);

Ok, looks like this can be dropped because we always call `compileToBytecode` in `makePreparedLambdaForm`?

-------------

PR Review: https://git.openjdk.org/jdk/pull/24835#pullrequestreview-2807133715
PR Review Comment: https://git.openjdk.org/jdk/pull/24835#discussion_r2068704507


More information about the core-libs-dev mailing list