RFR: 8268720: Unspecified checks on NameAndType constants should not be performed [v3]

David Holmes dholmes at openjdk.java.net
Mon Jun 21 02:51:31 UTC 2021


On Fri, 18 Jun 2021 13:57:05 GMT, Harold Seigel <hseigel at openjdk.org> wrote:

>> Please review this small fix for JDK-8268720.  The fix changes the JVM to no longer throw a ClassFormatError exception for a constant pool NameAndType that has a name and descriptor that are both valid, but are incompatible together, such as "<init>()D".
>> 
>> Note that if the CONSTANT_NameAndType_info for a CONSTANT_Methodref_info contained the name "<init>"and descriptor such as "()D" then a ClassFormatError exception would get thrown because the CONSTANT_Methodref_info would be invalid. JVM Spec section 4.4.2 says:
>> 
>> If the name of the method in a CONSTANT_Methodref_info structure begins with a '<' ('\u003c'), then the name must be the special name <init>, representing an instance initialization method (§2.9.1). The return type of such a method must be void.
>> 
>> The fix was tested with Mach5 tiers 1 and 2 on Linux, Mac OS, and Windows, Mach5 tiers 3-5 on Linux x64, and JCK Lang and VM tests on Linux x64.
>> 
>> Thanks, Harold
>
> Harold Seigel has updated the pull request incrementally with one additional commit since the last revision:
> 
>   add check_compatibility argument

src/hotspot/share/classfile/classFileParser.hpp line 464:

> 462:   int  verify_legal_method_signature(const Symbol* methodname,
> 463:                                      const Symbol* signature,
> 464:                                      bool check_compatibility,

Can't help but think this method is trying to perform two jobs when it should only be doing one. What we previously considered "legal" is not actually a check of legality per-se as it is context specific. Perhaps this should really be split into two sets of checks?

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

PR: https://git.openjdk.java.net/jdk/pull/4497


More information about the hotspot-runtime-dev mailing list