RFR (S): 8218939: vm/mlvm/anonloader/stress/byteMutation crashed on windows

coleen.phillimore at oracle.com coleen.phillimore at oracle.com
Fri Feb 15 00:09:38 UTC 2019


I see how this happened.

   char* bytes = (char*)name->bytes();
   unsigned int length = name->utf8_length();

We used to get signature with as_utf8_flexible_buffer.

This looks good.  Thank you for fixing this.

Coleen

On 2/14/19 5:58 PM, David Holmes 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