RFR: JDK-8230776: Javac throws AssertionError in jvm.Gen.visitExec
Vicente Romero
vicente.romero at oracle.com
Fri Aug 28 16:20:04 UTC 2020
Hi Jan,
I agree with your comments, I have uploaded another iteration at [1].
The only changes are in PoolReader,
Thanks,
Vicente
[1] http://cr.openjdk.java.net/~vromero/8230776/webrev.02/
On 8/28/20 9:57 AM, Jan Lahoda wrote:
> Hi Vicente,
>
> I think it looks great overall.
>
> Basically my only comment is for PoolReader. Given the performance of
> this code is potentially important, would it make sense to make the
> validity checks as fast as possible? E.g. having something like:
> readIfNeeded(int index, BitSet expectedTags) {
>
> ...
> if (!expectedTags.get(currentTag)) {
> throw reader.badClassFile("unexpected.const.pool.tag.at",
> tag(index), offset(index));
> }
>
> And having static final pre-created BitSets used to pass into this
> method?
>
> Thanks,
> Jan
>
> On 28. 08. 20 0:01, Vicente Romero wrote:
>> Hi Jan,
>>
>> Please review another iteration of the patch at [1], this one is a
>> bit more complex as it addresses several very related bugs together.
>> These bugs are [2-6]. The common factor is that javac interrupts
>> compilation with an exception or assertion error while compiling a
>> source file that extends a fuzzed class file.
>>
>> Thanks,
>> Vicente
>>
>> [1] http://cr.openjdk.java.net/~vromero/8230776/webrev.01/
>> [2] https://bugs.openjdk.java.net/browse/JDK-8231311
>> [3] https://bugs.openjdk.java.net/browse/JDK-8230964
>> [4] https://bugs.openjdk.java.net/browse/JDK-8230963
>> [5] https://bugs.openjdk.java.net/browse/JDK-8230919
>> [6] https://bugs.openjdk.java.net/browse/JDK-8230776
>>
>>
>> On 8/26/20 4:26 AM, Jan Lahoda wrote:
>>> Hi Vicente,
>>>
>>> I am sorry, but I don't think this is a fix on a good place.
>>>
>>> The root cause here is that the classfile for Test has an invalid
>>> method descriptor for the Test's constructor (returns float instead
>>> of void). See JVMS 4.6., descriptor_index. I think it would be much
>>> better to validate method descriptors, and reject classfiles with
>>> descriptors not adhering to JVMS. The user would then get a much
>>> more helpful error, saying something like:
>>> ---
>>> Sub.java:1: error: cannot access Test
>>> class Sub extends Test {}
>>> ^
>>> bad class file:
>>> /home/jlahoda/src/jdk/jdk/build/linux-x86_64-server-release/nb-jtreg/work/classes/tools/javac/T8230776/AssertionErrorTest.d/Test.class
>>>
>>> method descriptor invalid for <init>
>>> Please remove or make sure it appears in the correct
>>> subdirectory of the classpath.
>>> 1 error
>>> ---
>>>
>>> What do you think?
>>>
>>> Jan
>>>
>>> On 25. 08. 20 19:23, Vicente Romero wrote:
>>>> Please review fix for [1] at [2]. The fix is ending the compilation
>>>> at the code generation phase if a statement cant be generated and
>>>> there is no way for the compilation to continue.
>>>>
>>>> Thanks,
>>>> Vicente
>>>>
>>>> [1] https://bugs.openjdk.java.net/browse/JDK-8230776
>>>> [2] http://cr.openjdk.java.net/~vromero/8230776/webrev.00/
>>
More information about the compiler-dev
mailing list