RFR: JDK-8230776: Javac throws AssertionError in jvm.Gen.visitExec
Jan Lahoda
jan.lahoda at oracle.com
Tue Sep 1 16:10:48 UTC 2020
Looks good to me.
Jan
On 28. 08. 20 18:20, Vicente Romero wrote:
> 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