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