--- old/make/build.xml 2014-12-04 19:42:57.736283942 +0530
+++ new/make/build.xml 2014-12-04 19:42:57.632283423 +0530
@@ -36,9 +36,9 @@
-
+
-
+
--- old/src/jdk.scripting.nashorn/share/classes/jdk/nashorn/internal/runtime/AstDeserializer.java 2014-12-04 19:42:58.384287155 +0530
+++ new/src/jdk.scripting.nashorn/share/classes/jdk/nashorn/internal/runtime/AstDeserializer.java 2014-12-04 19:42:58.160286048 +0530
@@ -27,6 +27,8 @@
import java.io.ByteArrayInputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
+import java.security.AccessController;
+import java.security.PrivilegedAction;
import java.util.zip.InflaterInputStream;
import jdk.nashorn.internal.ir.FunctionNode;
@@ -36,12 +38,18 @@
*/
final class AstDeserializer {
static FunctionNode deserialize(final byte[] serializedAst) {
- try {
- return (FunctionNode)new ObjectInputStream(new InflaterInputStream(new ByteArrayInputStream(
- serializedAst))).readObject();
- } catch (final ClassNotFoundException | IOException e) {
- // This is internal, can't happen
- throw new AssertionError("Unexpected exception deserializing function", e);
- }
+ // FIXME: do we need this doPrivileged block at all?
+ return AccessController.doPrivileged(new PrivilegedAction() {
+ @Override
+ public FunctionNode run() {
+ try {
+ return (FunctionNode)new ObjectInputStream(new InflaterInputStream(
+ new ByteArrayInputStream(serializedAst))).readObject();
+ } catch (final ClassNotFoundException | IOException e) {
+ // This is internal, can't happen
+ throw new AssertionError("Unexpected exception deserializing function", e);
+ }
+ }
+ });
}
}
--- old/src/jdk.scripting.nashorn/share/classes/jdk/nashorn/internal/runtime/linker/BrowserJSObjectLinker.java 2014-12-04 19:42:58.864289537 +0530
+++ new/src/jdk.scripting.nashorn/share/classes/jdk/nashorn/internal/runtime/linker/BrowserJSObjectLinker.java 2014-12-04 19:42:58.740288928 +0530
@@ -45,7 +45,15 @@
* A Dynalink linker to handle web browser built-in JS (DOM etc.) objects.
*/
final class BrowserJSObjectLinker implements TypeBasedGuardingDynamicLinker {
- private static final ClassLoader myLoader = BrowserJSObjectLinker.class.getClassLoader();
+ private static ClassLoader extLoader;
+ static {
+ extLoader = BrowserJSObjectLinker.class.getClassLoader();
+ // in case nashorn is loaded as bootstrap!
+ if (extLoader == null) {
+ extLoader = ClassLoader.getSystemClassLoader().getParent();
+ }
+ }
+
private static final String JSOBJECT_CLASS = "netscape.javascript.JSObject";
// not final because this is lazily initialized
// when we hit a subclass for the first time.
@@ -69,7 +77,7 @@
// check if this class is a subclass of JSObject
Class> clazz = type;
while (clazz != null) {
- if (clazz.getClassLoader() == myLoader &&
+ if (clazz.getClassLoader() == extLoader &&
clazz.getName().equals(JSOBJECT_CLASS)) {
jsObjectClass = clazz;
return true;
--- old/src/jdk.scripting.nashorn/share/classes/jdk/nashorn/internal/runtime/linker/JavaAdapterClassLoader.java 2014-12-04 19:42:59.300291701 +0530
+++ new/src/jdk.scripting.nashorn/share/classes/jdk/nashorn/internal/runtime/linker/JavaAdapterClassLoader.java 2014-12-04 19:42:59.204291218 +0530
@@ -104,7 +104,7 @@
// SecurityException for nashorn's classes!. For adapter's to work, we
// should be able to refer to the few classes it needs in its implementation.
if(VISIBLE_INTERNAL_CLASS_NAMES.contains(name)) {
- return myLoader.loadClass(name);
+ return myLoader != null? myLoader.loadClass(name) : Class.forName(name, false, myLoader);
}
throw se;
}
--- old/test/script/basic/JDK-8066232.js 2014-12-04 19:42:59.736293860 +0530
+++ new/test/script/basic/JDK-8066232.js 2014-12-04 19:42:59.600293184 +0530
@@ -34,3 +34,5 @@
} catch(e if 1) {
}
})()
+
+print("SUCCESS");