FULL PRODUCT VERSION : java version "1.8.0_45" Java(TM) SE Runtime Environment (build 1.8.0_45-b15) Java HotSpot(TM) 64-Bit Server VM (build 25.45-b02, mixed mode) ADDITIONAL OS VERSION INFORMATION : Windows -7 A DESCRIPTION OF THE PROBLEM : public static void main(String[] args) throws ScriptException { ScriptEngine engine = new ScriptEngineManager().getEngineByName("js"); engine.eval("Object.prototype.merge = function(obj2){ return this; }"); engine.eval("function nothingTodo(k, v) {return v}"); engine.eval("JSON.parse('{\"name\" : \"jack\"}')"); // ^^^^^^^^^^^^ THAT IS OK engine.eval("JSON.parse('{\"name\" : \"jack\"}', nothingTodo)"); // ^^^^^^^^^^^^ DEAD LOOP } Exception in thread "main" java.lang.StackOverflowError at jdk.nashorn.internal.runtime.PropertyHashMap.find(PropertyHashMap.java:275) at jdk.nashorn.internal.runtime.PropertyMap.findProperty(PropertyMap.java:552) at jdk.nashorn.internal.runtime.ScriptObject.findProperty(ScriptObject.java:814) at jdk.nashorn.internal.runtime.ScriptObject.findProperty(ScriptObject.java:823) at jdk.nashorn.internal.runtime.ScriptObject.findProperty(ScriptObject.java:790) at jdk.nashorn.internal.runtime.ScriptObject.get(ScriptObject.java:3000) at jdk.nashorn.internal.runtime.ScriptObject.get(ScriptObject.java:3020) at jdk.nashorn.internal.runtime.JSONFunctions.walk(JSONFunctions.java:113) at jdk.nashorn.internal.runtime.JSONFunctions.walk(JSONFunctions.java:120) at jdk.nashorn.internal.runtime.JSONFunctions.walk(JSONFunctions.java:120) at jdk.nashorn.internal.runtime.JSONFunctions.walk(JSONFunctions.java:120) at jdk.nashorn.internal.runtime.JSONFunctions.walk(JSONFunctions.java:120) at jdk.nashorn.internal.runtime.JSONFunctions.walk(JSONFunctions.java:120) at jdk.nashorn.internal.runtime.JSONFunctions.walk(JSONFunctions.java:120) at jdk.nashorn.internal.runtime.JSONFunctions.walk(JSONFunctions.java:120) at jdk.nashorn.internal.runtime.JSONFunctions.walk(JSONFunctions.java:120) at jdk.nashorn.internal.runtime.JSONFunctions.walk(JSONFunctions.java:120) at jdk.nashorn.internal.runtime.JSONFunctions.walk(JSONFunctions.java:120) at jdk.nashorn.internal.runtime.JSONFunctions.walk(JSONFunctions.java:120) REGRESSION. Last worked in version 8u45 ERROR MESSAGES/STACK TRACES THAT OCCUR : Exception in thread "main" java.lang.StackOverflowError at jdk.nashorn.internal.runtime.PropertyHashMap.find(PropertyHashMap.java:275) at jdk.nashorn.internal.runtime.PropertyMap.findProperty(PropertyMap.java:552) at jdk.nashorn.internal.runtime.ScriptObject.findProperty(ScriptObject.java:814) at jdk.nashorn.internal.runtime.ScriptObject.findProperty(ScriptObject.java:823) at jdk.nashorn.internal.runtime.ScriptObject.findProperty(ScriptObject.java:790) at jdk.nashorn.internal.runtime.ScriptObject.get(ScriptObject.java:3000) at jdk.nashorn.internal.runtime.ScriptObject.get(ScriptObject.java:3020) at jdk.nashorn.internal.runtime.JSONFunctions.walk(JSONFunctions.java:113) at jdk.nashorn.internal.runtime.JSONFunctions.walk(JSONFunctions.java:120) at jdk.nashorn.internal.runtime.JSONFunctions.walk(JSONFunctions.java:120) at jdk.nashorn.internal.runtime.JSONFunctions.walk(JSONFunctions.java:120) at jdk.nashorn.internal.runtime.JSONFunctions.walk(JSONFunctions.java:120) at jdk.nashorn.internal.runtime.JSONFunctions.walk(JSONFunctions.java:120) at jdk.nashorn.internal.runtime.JSONFunctions.walk(JSONFunctions.java:120) at jdk.nashorn.internal.runtime.JSONFunctions.walk(JSONFunctions.java:120) at jdk.nashorn.internal.runtime.JSONFunctions.walk(JSONFunctions.java:120) at jdk.nashorn.internal.runtime.JSONFunctions.walk(JSONFunctions.java:120) at jdk.nashorn.internal.runtime.JSONFunctions.walk(JSONFunctions.java:120) at jdk.nashorn.internal.runtime.JSONFunctions.walk(JSONFunctions.java:120) REPRODUCIBILITY : This bug can be reproduced always. ---------- BEGIN SOURCE ---------- import javax.script.ScriptEngine; import javax.script.ScriptEngineManager; import javax.script.ScriptException; public class Look { public static void main(String[] args) throws ScriptException { ScriptEngine engine = new ScriptEngineManager().getEngineByName("js"); engine.eval("Object.prototype.merge = function(obj2){ return this; }"); engine.eval("function nothingTodo(k, v) {return v}"); engine.eval("JSON.parse('{\"name\" : \"jack\"}')"); engine.eval("JSON.parse('{\"name\" : \"jack\"}', nothingTodo)"); } } ---------- END SOURCE ----------
|