RFR (XS) JDK-8041918: BootstrapMethods attribute cannot be empty
lois.foltan at oracle.com
Mon May 12 13:03:51 UTC 2014
Please review new updated webrev for this bug that takes into account
all of Harold's suggested changes, including the test just checking for
"java.lang.ClassFormatError". After mulling it over a bit, that did
seem to make sense.
On 5/9/2014 10:51 AM, Lois Foltan wrote:
> On 5/9/2014 10:27 AM, harold seigel wrote:
>> Hi Lois,
>> Could TestEmptyBootstrapMethodsAttr.java, just check for
>> "java.lang.ClassFormatError"? Then the test would not break if the
>> rest of the message changed.
> Hi Harold,
> Thanks for the review. I can do that, but would prefer not to. It
> allows the test to verify specifically the boundary condition of an
> attribute_length of 2. If the message is changed in the future, it
> would be pretty obvious why the test is failing.
>> I think the .jcod files need copyright statements. Also, could you
>> add a small comment about what each one does.
> Will do.
>> Thanks, Harold
>> On 5/9/2014 10:22 AM, Lois Foltan wrote:
>>> Please review the following fix:
>>> Bug: BootstrapMethods attribute cannot be empty
>>> Summary of fix:
>>> JVMS 8, section 4.7.23 details the BootstrapMethods attribute. In
>>> particular, page 155, describes the "attribute length" field of a
>>> BootstrapMethods attribute by documenting, "the value of the
>>> attribute_length item indicates the length of the attribute,
>>> excluding the initial six bytes." Thus, a valid BootstrapMethod
>>> attribute could have an empty bootstrap_methods table where the
>>> num_bootstrap_methods field is equal to zero. This situation would
>>> set the attribute_length legitimately to 2. The class format check
>>> within ClassFileParser::parse_classfile_bootstrap_methods_attribte()
>>> must check for attribute_byte_length to be greater than or equal to
>>> the sizeof(u2). This check was added post JDK 8, an empty
>>> bootstrap_methods table was accepted by JDK 8 without generating a
>>> ClassFormatError. Thank you to Harold Seigel for helping to figure
>>> out the .jcod files to yield a reproducer for this bug.
>>> Hotspot's jtreg tests, JCK lang & vm, JDK lang & util,
>>> Thank you,
More information about the hotspot-runtime-dev