RFR (S): 8218939: vm/mlvm/anonloader/stress/byteMutation crashed on windows
David Holmes
david.holmes at oracle.com
Fri Feb 15 03:33:49 UTC 2019
Thanks Igor. I'll push this now.
David
On 15/02/2019 12:59 pm, Igor Ignatyev wrote:
>
>
>> On Feb 14, 2019, at 5:26 PM, David Holmes <david.holmes at oracle.com
>> <mailto:david.holmes at oracle.com>> wrote:
>>
>> On 15/02/2019 10:45 am, Igor Ignatyev wrote:
>>> I'm sorry I wasn't clear enough, I'm suggesting to harden
>>> runtime/classFileParserBug/TestBadClassName.java test, not
>>> vm/mlvm/anonloader/stress/byteMutation.
>>> in TestBadClassName.java, we should always get CFE, so we can assert
>>> that it has the expected message.
>>
>> Ah! Sure. That would have caught this bug much earlier.
>>
>> http://cr.openjdk.java.net/~dholmes/8218939/webrev.v2/
>
> LGTM.
>
> -- Igor
>>
>> Thanks,
>> David
>>
>>> -- Igor
>>>> On Feb 14, 2019, at 4:36 PM, David Holmes <david.holmes at oracle.com
>>>> <mailto:david.holmes at oracle.com>> wrote:
>>>>
>>>> Hi Igor,
>>>>
>>>> Thanks for looking at this.
>>>>
>>>> On 15/02/2019 10:20 am, Igor Ignatyev wrote:
>>>>> Hi David,
>>>>> the fix looks good to me. does it make sense to harden the test and
>>>>> assert the message?
>>>>
>>>> In what way would you harden the test? It does random byte writes
>>>> which could possibly still result in a legal classfile. You'd
>>>> actually have to control the modifications to trigger specific
>>>> errors that could be asserted. And I would expect such tests live
>>>> somewhere in the JCK already.
>>>>
>>>> Thanks,
>>>> David
>>>> -----
>>>>
>>>>> -- Igor
>>>>>> On Feb 14, 2019, at 2:58 PM, David Holmes <david.holmes at oracle.com
>>>>>> <mailto:david.holmes at oracle.com>> wrote:
>>>>>>
>>>>>> webrev: http://cr.openjdk.java.net/~dholmes/8218939/webrev
>>>>>> bug: https://bugs.openjdk.java.net/browse/JDK-8218939
>>>>>>
>>>>>> The bytes() in a Symbol are UTF8 but do not form a NUL-terminated
>>>>>> C-string. In a couple of places in the classfile parser we are
>>>>>> treating it as NUL-terminated:
>>>>>>
>>>>>> - in name validation we were calling strchr to find the
>>>>>> semi-colon, but this could run off through memory if there was no
>>>>>> semi-colon (as per the testcase). This is replaced with memchr
>>>>>> which takes the expected length.
>>>>>>
>>>>>> - in formatting the exception message we used %s but instead we
>>>>>> need %.*s and pass the length
>>>>>>
>>>>>> There's a minor change to a test to print the exception
>>>>>> information as that exposes the fact we were doing things
>>>>>> incorrectly e.g:
>>>>>>
>>>>>> java.lang.ClassFormatError: Illegal class name
>>>>>> "p1//BadInterface1\u00f1\u00ab\u00ab\u00ab\u00ab\u00ab\u00ab\u00ab\u00ab\u00ab\u00ab\u00ab\u00ab\u00ab\u00ab\u00ab\u00abU"
>>>>>> in class file
>>>>>>
>>>>>> versus (after bug fix)
>>>>>>
>>>>>> java.lang.ClassFormatError: Illegal class name "p1//BadInterface1"
>>>>>> in class file UseBadInterface1
>>>>>>
>>>>>> Testing:
>>>>>> - re-ran failing test on Windows with seeds known to have caused
>>>>>> failures
>>>>>> - ran ran failing test on Windows 150 times with random seeds
>>>>>> - tiers 1-3
>>>>>>
>>>>>> Thanks,
>>>>>> David
>>>>>> -----
>
More information about the hotspot-runtime-dev
mailing list