RFR: 8262913: KlassFactory::create_from_stream should never return NULL [v2]

Ioi Lam iklam at openjdk.java.net
Wed Mar 10 01:38:09 UTC 2021


On Tue, 9 Mar 2021 14:32:36 GMT, Coleen Phillimore <coleenp at openjdk.org> wrote:

>> ClassFileParser.create_instance_klass cannot return NULL without a pending exception, it's called by 
>>        klassFactory::create_from_stream who also cannot return NULL without a pending exception, it's called by
>>        SystemDictionary::parse_stream and SystemDictionary::resolve_from_stream who also cannot return NULL without a pending exception.
>> 
>> I removed the NULL checks on returns from these 4 functions and either replaced them with an assert, or in cases that already had an unconditional indirection from the return value, just removed the null checks.
>> 
>> I wrote a test case to cover the case of testing st->buffer() == NULL which returned NULL from SystemDictionary::resolve_from_stream to show that this code path is not used. ClassFileStream constructor will set buffer() to the u1* input argument if it doesn't point to anything and will get a ClassFormatError.
>> 
>> Tested with tier1-3.
>
> Coleen Phillimore has updated the pull request incrementally with one additional commit since the last revision:
> 
>   Replace equals with contains, suggested by hseigel.

One small nit about the test code. The rest looks good to me.

test/hotspot/jtreg/runtime/DefineClass/NullClassBytesTest.java line 73:

> 71:         }
> 72: 
> 73:         byte[] getClassData(String name) {

This function can be simplified to something like

return SimpleLoader.class.getClassLoader().getResourceAsStream(name + ".class").readAllBytes();

That way it will be more resilient if jtreg wants to put the classfile elsewhere.

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

Marked as reviewed by iklam (Reviewer).

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


More information about the hotspot-dev mailing list