Hi.

We have encountered a bug in Nashorn with JDK8 u221. It can be reproduced by 
evaluation of this script with "jjs --language=es6":

{{{{{{{{{{{{{{{ let x; }}}}}}}}}}}}}}}

It results in "java.lang.ArrayIndexOutOfBoundsException: 16" output. It need 
exactly 15 curly braces to cause this bug.

And here is the patch to fix it:

diff -r 06eed83ab4cd 
src/jdk.scripting.nashorn/share/classes/jdk/nashorn/internal/ir/LexicalContext.java
--- 
a/src/jdk.scripting.nashorn/share/classes/jdk/nashorn/internal/ir/LexicalContext.java
       Tue Aug 06 12:14:41 20>
+++ 
b/src/jdk.scripting.nashorn/share/classes/jdk/nashorn/internal/ir/LexicalContext.java
       Fri Aug 09 11:37:23 20>
@@ -697,7 +697,7 @@
      * @return {@code true} if in unprotected switch statement.
      */
     public boolean inUnprotectedSwitchContext() {
-        for (int i = sp; i > 0; i--) {
+        for (int i = sp - 1; i > 0; i--) {
             final LexicalContextNode next = stack[i];
             if (next instanceof Block) {
                 return stack[i - 1] instanceof SwitchNode;

P.S. Can we expect that this bug will be fixed in JDK8 updates?

Reply via email to