RFR(S) 8139164: JVM should throw ClassFormatError for non-void methods named <clinit>

harold seigel harold.seigel at oracle.com
Mon Oct 26 15:41:06 UTC 2015


Hi Lois,

Thanks for the review.

Methods that start with "<" but are not named "<clinit>" or "<init>" are 
not legal method names and are detected quite early in class file 
parsing by function ClassFileParser::verify_legal_method_name().  That 
allows the subsequent parsing code to know that any method name starting 
with "<" must be either a class initializer or object initializer.

Testing for methods whose names start with "<" but are not "<clinit>" or 
"<init>" is a distinct issue from this bug and would require its own 
bug, if need be.

Thanks, Harold

On 10/26/2015 9:15 AM, Lois Foltan wrote:
> Hi Harold,
>
> I think this looks good.  I don't see in any of the tests a test for a 
> bogus internal method named something other than <clinit> or <init>.  
> Can you locate one if it exists or add one since your change is now 
> checking all methods that start with "<", not just ones that are equal 
> to vmSymbols::object_initializer_name().  Would this case pass for 
> class files <= 51?
>
> Thanks,
> Lois
>
> On 10/26/2015 8:31 AM, harold seigel wrote:
>> Hi,
>>
>> Please review this small change to fix bug 8139164.
>>
>> Recent proposed JVM-9 Spec changes (JDK-8130682 
>> <https://bugs.openjdk.java.net/browse/JDK-8130682>) require throwing 
>> ClassFormatError exceptions for class file versions >= 51 for methods 
>> named <clinit> that have one or more arguments or are not static.  
>> This fix implements that change.
>>
>> Open webrev: http://cr.openjdk.java.net/~hseigel/bug_8139164/
>>
>> JBS Bug: https://bugs.openjdk.java.net/browse/JDK-8139164
>>
>> The fix was tested with JCK Lang, VM, and API java_lang tests, the 
>> UTE quick and split verifier tests, and the hotspot, JDK vm, java/io, 
>> java/lang, and java/util JTreg tests, and the tests included in this 
>> RFR.
>>
>> Thanks, Harold
>



More information about the hotspot-runtime-dev mailing list