-
Bug
-
Resolution: Duplicate
-
P4
-
None
-
8u45
-
x86
-
os_x
FULL PRODUCT VERSION :
java version "1.8.0_45"
Java(TM) SE Runtime Environment (build 1.8.0_45-b14)
Java HotSpot(TM) 64-Bit Server VM (build 25.45-b02, mixed mode)
ADDITIONAL OS VERSION INFORMATION :
OS X 10.10
A DESCRIPTION OF THE PROBLEM :
Test program showing buggy behavior attached below. Basically it looks like a recursive call to eval changes the original bindings part-way through the execution of the enclosing script.
REPRODUCIBILITY :
This bug can be reproduced always.
---------- BEGIN SOURCE ----------
package edu;
import javax.script.*;
import jdk.nashorn.api.scripting.NashornScriptEngineFactory;
public class Test {
static ScriptEngine engine;
public static void main (String[] args) {
NashornScriptEngineFactory factory = new NashornScriptEngineFactory();
engine = factory.getScriptEngine(new String[]{"--global-per-engine"});
Bindings bindings = new SimpleBindings();
bindings.put("hello", "world");
try {
engine.eval("print(hello)", bindings); // prints: world
// Following prints:
// nested
// javax.script.ScriptException: ReferenceError: "hello" is not defined in <eval> at line number 1
engine.eval("Packages.edu.Test.nested(); print(hello);", bindings);
} catch (ScriptException e) { System.out.println(e); }
System.out.println(bindings.get("hello")); // prints: world
}
public static void nested () {
try { engine.eval("print('nested')"); } catch (ScriptException e) { System.out.println(e); }
}
}
---------- END SOURCE ----------
SUPPORT :
YES
java version "1.8.0_45"
Java(TM) SE Runtime Environment (build 1.8.0_45-b14)
Java HotSpot(TM) 64-Bit Server VM (build 25.45-b02, mixed mode)
ADDITIONAL OS VERSION INFORMATION :
OS X 10.10
A DESCRIPTION OF THE PROBLEM :
Test program showing buggy behavior attached below. Basically it looks like a recursive call to eval changes the original bindings part-way through the execution of the enclosing script.
REPRODUCIBILITY :
This bug can be reproduced always.
---------- BEGIN SOURCE ----------
package edu;
import javax.script.*;
import jdk.nashorn.api.scripting.NashornScriptEngineFactory;
public class Test {
static ScriptEngine engine;
public static void main (String[] args) {
NashornScriptEngineFactory factory = new NashornScriptEngineFactory();
engine = factory.getScriptEngine(new String[]{"--global-per-engine"});
Bindings bindings = new SimpleBindings();
bindings.put("hello", "world");
try {
engine.eval("print(hello)", bindings); // prints: world
// Following prints:
// nested
// javax.script.ScriptException: ReferenceError: "hello" is not defined in <eval> at line number 1
engine.eval("Packages.edu.Test.nested(); print(hello);", bindings);
} catch (ScriptException e) { System.out.println(e); }
System.out.println(bindings.get("hello")); // prints: world
}
public static void nested () {
try { engine.eval("print('nested')"); } catch (ScriptException e) { System.out.println(e); }
}
}
---------- END SOURCE ----------
SUPPORT :
YES
- relates to
-
JDK-8081609 engine.eval call from a java method which was called from a previous engine.eval results in wrong ScriptContext being used.
-
- Resolved
-