On Mon, 21 Jul 2025 00:32:24 GMT, simon <d...@openjdk.org> wrote:

>> src/java.base/share/classes/jdk/internal/classfile/impl/ClassFileVersionImpl.java
>>  line 54:
>> 
>>> 52:     public Optional<ClassFileFormatVersion> formatVersion() {
>>> 53:         try {
>>> 54:             return 
>>> Optional.of(ClassFileFormatVersion.fromMajor(majorVersion));
>> 
>> You should check the minor version to be 0 for major versions 54 and later.
>
> Do you mean something like this? 
> 
> 
> @Override
>     public Optional<ClassFileFormatVersion> formatVersion() {
>         if (majorVersion < 54 || minorVersion != 0) {
>             return Optional.empty();
>         }
>         try {
>             return 
> Optional.of(ClassFileFormatVersion.fromMajor(majorVersion));
>         } catch (IllegalArgumentException e) {
>             return Optional.empty();
>         }
>     }

No, this logic is wrong. It's more like the check in 
https://github.com/openjdk/jdk/blob/441dbde2c3c915ffd916e39a5b4a91df5620d7f3/src/java.base/share/classes/jdk/internal/misc/VM.java#L174-L180


 public Optional<ClassFileFormatVersion> formatVersion() { 
     if (majorVersion < ClassFile.JAVA_1_VERSION || majorVersion > 
ClassFile.latestMajorVersion()) return Optional.empty(); 
     // for major version is between 45 and 55 inclusive, the minor version may 
be any value 
     if (majorVersion >= ClassFile.JAVA_12_VERSION && minorVersion != 0) return 
Optional.empty(); 
     // otherwise, only minor version 0 is a defined, persistent format
     return Optional.of(ClassFileFormatVersion.fromMajor(majorVersion)); 
 }

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

PR Review Comment: https://git.openjdk.org/jdk/pull/26406#discussion_r2218095625

Reply via email to