RFR: 8333748: javap crash - Fatal error: Unmatched bit position 0x2 for location CLASS [v2]

Adam Sotona asotona at openjdk.org
Mon Jun 17 09:22:14 UTC 2024


On Fri, 14 Jun 2024 17:02:40 GMT, Chen Liang <liach at openjdk.org> wrote:

>> Currently, javap crashes for class files that have set non-zero values for undefined access flag bits, as `java.lang.reflect.AccessFlag.maskToAccessFlag` and `java.lang.classfile.AccessFlags.flags` fail. In contrast, the JVMS, though asking for these bits to be set to 0, requires VM to proceed and ignore these bits. javap should emulate the VM behavior and proceed rendering, ignoring these undefined bits.
>> 
>> In addition, a few bytecode generation utilities in the JDK set unused bits, such as in `java.lang.invoke.MethodHandleImpl.BindCaller#generateInvokerTemplate` and `java.lang.invoke.GenerateJLIClassesHelper#generateCodeBytesForLFs`. Those can be updated in a later cleanup.
>
> Chen Liang has updated the pull request incrementally with two additional commits since the last revision:
> 
>  - I am a dumbass
>  - Retain strict flag for Method, even though it's obsolete

`javap` should never silently ignore erroneous class file content.
If the flag value violates JVMS - it should be reported as an error and `javap` should reflect that in the return value.
On the other hand `javap` should handle such situations, provide relevant error message and continue with the report.
It is similar case as `javap` detection of inappropriate CP entry types.

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

PR Comment: https://git.openjdk.org/jdk/pull/19708#issuecomment-2172842079


More information about the compiler-dev mailing list