RFR: 8354323: Safeguard SwitchBootstraps.typeSwitch when used outside the compiler
Aggelos Biboudis
abimpoudis at openjdk.org
Wed May 7 12:02:26 UTC 2025
While the compiler does not allow invalid queries to flow into `SwitchBootstraps:typeSwitch`, a library user could do that and `typeSwitch` does not prevent such usage pattern errors resulting in erroneous evaluation.
For example this is not valid Java (and protected) by javac:
byte b = 1;
switch (b) {
case String s -> System.out.println("How did we get here? byte is " + s.getClass());
}
but this is a valid call (and not protected):
CallSite shortSwitch = SwitchBootstraps.typeSwitch(
MethodHandles.lookup(),
"",
MethodType.methodType(int.class, short.class, int.class), // models (short, int) -> int
String.class);
The `SwitchBootstraps.typeSwitch` returns wrong result since the code was reasoning erroneously that this pair was unconditionally exact.
This PR proposes to add the safety check in unconditional exactness which will return false in erroneous pairs and then the actual check will be delegated to `instanceof`. For the case of erroneous pairs with primitive `boolean`s there is a check in the beginning of the type switch skeleton.
-------------
Commit messages:
- 8354323: Safeguard SwitchBootstraps.typeSwitch when used outside the compiler
Changes: https://git.openjdk.org/jdk/pull/25090/files
Webrev: https://webrevs.openjdk.org/?repo=jdk&pr=25090&range=00
Issue: https://bugs.openjdk.org/browse/JDK-8354323
Stats: 33 lines in 2 files changed: 27 ins; 0 del; 6 mod
Patch: https://git.openjdk.org/jdk/pull/25090.diff
Fetch: git fetch https://git.openjdk.org/jdk.git pull/25090/head:pull/25090
PR: https://git.openjdk.org/jdk/pull/25090
More information about the core-libs-dev
mailing list