RFR Nashorn: Generated script class name fails --verify-code for names with special chars

A. Sundararajan sundararajan.athijegannathan at oracle.com
Wed Oct 15 13:06:29 UTC 2014


Trying to figure out how to file a bug against ASM. Basically ASM's 
verifier enforces strict java identifier for class names. But, method 
names accept relaxed JVM symbol syntax.

The current nashorn fix is a workaround for ASM issue.

How to reproduce using jdk 8u20's jjs

jjs --verify-code  -doe

java.lang.IllegalArgumentException: Invalid class name (must be a fully 
qualified class name in internal form): 
jdk/nashorn/internal/scripts/Script$\^shell
java.lang.IllegalArgumentException: Invalid class name (must be a fully 
qualified class name in internal form): 
jdk/nashorn/internal/scripts/Script$\^shell
     at 
jdk.internal.org.objectweb.asm.util.CheckMethodAdapter.checkInternalName(CheckMethodAdapter.java:1380)
     at 
jdk.internal.org.objectweb.asm.util.CheckMethodAdapter.checkInternalName(CheckMethodAdapter.java:1347)
     at 
jdk.internal.org.objectweb.asm.util.CheckClassAdapter.visit(CheckClassAdapter.java:412)
     at 
jdk.internal.org.objectweb.asm.ClassReader.accept(ClassReader.java:651)
     at 
jdk.internal.org.objectweb.asm.ClassReader.accept(ClassReader.java:535)
     at 
jdk.internal.org.objectweb.asm.util.CheckClassAdapter.verify(CheckClassAdapter.java:241)
     at jdk.nashorn.internal.runtime.Context.verify(Context.java:889)
     at 
jdk.nashorn.internal.runtime.Context$ContextCodeInstaller.verify(Context.java:174)
     at 
jdk.nashorn.internal.codegen.CompilationPhase$8.transform(CompilationPhase.java:414)
     at 
jdk.nashorn.internal.codegen.CompilationPhase.apply(CompilationPhase.java:513)
     at jdk.nashorn.internal.codegen.Compiler.compile(Compiler.java:361)
     at jdk.nashorn.internal.runtime.Context.compile(Context.java:1071)
     at jdk.nashorn.internal.runtime.Context.eval(Context.java:552)
     at jdk.nashorn.tools.Shell.readEvalPrint(Shell.java:410)
     at jdk.nashorn.tools.Shell.run(Shell.java:157)
     at jdk.nashorn.tools.Shell.main(Shell.java:132)
     at jdk.nashorn.tools.Shell.main(Shell.java:111)

Nashorn uses "<shell>" to be class name (after safe escaping as 
\^shell\_ as described @ 
https://blogs.oracle.com/jrose/entry/symbolic_freedom_in_the_vm). While 
VM is fine with that name, ASM's verifier does not like it.

Thanks
-Sundar

On Wednesday 15 October 2014 06:31 PM, Jim Laskey (Oracle) wrote:
> +1
>
> On Oct 15, 2014, at 9:58 AM, A. Sundararajan <sundararajan.athijegannathan at oracle.com> wrote:
>
>> Please review http://cr.openjdk.java.net/~sundar/8060688/ for https://bugs.openjdk.java.net/browse/JDK-8060688
>>
>> Thanks,
>> -Sundar



More information about the nashorn-dev mailing list