aboutsummaryrefslogtreecommitdiffstats
path: root/java/jdk14/files/patch-javascript_JSClassLoader.java
diff options
context:
space:
mode:
Diffstat (limited to 'java/jdk14/files/patch-javascript_JSClassLoader.java')
-rw-r--r--java/jdk14/files/patch-javascript_JSClassLoader.java243
1 files changed, 0 insertions, 243 deletions
diff --git a/java/jdk14/files/patch-javascript_JSClassLoader.java b/java/jdk14/files/patch-javascript_JSClassLoader.java
deleted file mode 100644
index 1e3a9ad3080b..000000000000
--- a/java/jdk14/files/patch-javascript_JSClassLoader.java
+++ /dev/null
@@ -1,243 +0,0 @@
-$FreeBSD$
-
---- ../../deploy/src/plugin/src/share/classes/sun/plugin/javascript/JSClassLoader.java 1 Jan 1970 00:00:00 -0000
-+++ ../../deploy/src/plugin/src/share/classes/sun/plugin/javascript/JSClassLoader.java 3 Dec 2004 03:56:58 -0000 1.1
-@@ -0,0 +1,238 @@
-+/*
-+ * @(#)JSClassLoader.java 1.1 04/06/20
-+ *
-+ * Copyright 2004 Sun Microsystems, Inc. All rights reserved.
-+ * SUN PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.
-+ */
-+
-+package sun.plugin.javascript;
-+
-+import java.security.AllPermission;
-+import java.security.AccessController;
-+import java.security.PermissionCollection;
-+import java.security.SecureClassLoader;
-+import java.security.PrivilegedExceptionAction;
-+import java.security.CodeSource;
-+import java.io.InputStream;
-+import java.io.BufferedInputStream;
-+import java.io.IOException;
-+import java.net.URL;
-+import java.net.URLConnection;
-+import java.net.HttpURLConnection;
-+import java.lang.reflect.Method;
-+import java.lang.reflect.InvocationTargetException;
-+import java.lang.reflect.AccessibleObject;
-+import sun.net.www.ParseUtil;
-+import sun.security.util.SecurityConstants;
-+
-+/*
-+ * Create a trampoline class for JavaScript to Java
-+ * method invocations.
-+ *
-+ */
-+public final class JSClassLoader extends SecureClassLoader {
-+ private static String JS_PROXY_PKG = "sun.plugin.javascript.invoke.";
-+ private static String TRAMPOLINE = JS_PROXY_PKG + "JSInvoke";
-+ private static Method bounce;
-+
-+ /*
-+ * Bounce through the trampoline.
-+ */
-+ public static Object invoke(Method m, Object obj, Object[] params)
-+ throws Exception {
-+ try {
-+ return bounce().invoke(null, new Object[] {m, obj, params});
-+ } catch (InvocationTargetException ie) {
-+ Throwable t = ie.getCause();
-+
-+ if (t instanceof InvocationTargetException) {
-+ throw (InvocationTargetException)t;
-+ } else {
-+ throw ie;
-+ }
-+ }
-+ }
-+
-+ /**
-+ * Check the package access permission by giving a class
-+ *
-+ * @param clazz: The Class object trying to get access to
-+ *
-+ */
-+ public static void checkPackageAccess(Class clazz) {
-+ String clsname = clazz.getName();
-+ int index = clsname.lastIndexOf(".");
-+ if (index != -1) {
-+ String pkgname = clsname.substring(0, index);
-+ SecurityManager s = System.getSecurityManager();
-+ if (s != null) {
-+ s.checkPackageAccess(pkgname);
-+ }
-+ }
-+ }
-+
-+ public static boolean isPackageAccessible(Class clazz) {
-+ try {
-+ checkPackageAccess(clazz);
-+ } catch (SecurityException e) {
-+ return false;
-+ }
-+ return true;
-+ }
-+
-+
-+ private synchronized static Method bounce() throws Exception {
-+ if (bounce == null) {
-+ bounce = (Method) AccessController.doPrivileged(new PrivilegedExceptionAction() {
-+ public Object run() throws Exception {
-+ Class[] types;
-+ Class t = getTrampoline();
-+ Method b;
-+
-+ types = new Class[] {Method.class, Object.class, Object[].class};
-+ b = t.getDeclaredMethod("invoke", types);
-+ ((AccessibleObject)b).setAccessible(true);
-+ return b;
-+ }
-+ });
-+ }
-+ return bounce;
-+ }
-+
-+ private static Class getTrampoline() {
-+ try {
-+ return Class.forName(TRAMPOLINE, true, new JSClassLoader());
-+ } catch (ClassNotFoundException e) {
-+ }
-+ return null;
-+ }
-+
-+
-+ protected synchronized Class loadClass(String name, boolean resolve)
-+ throws ClassNotFoundException
-+ {
-+ SecurityManager s = System.getSecurityManager();
-+ if (s != null) {
-+ String cname = name.replace('/', '.');
-+ if (cname.startsWith("[")) {
-+ int b = cname.lastIndexOf('[') + 2;
-+ if (b > 1 && b < cname.length()) {
-+ cname = cname.substring(b);
-+ }
-+ }
-+ int i = cname.lastIndexOf('.');
-+ if (i != -1) {
-+ s.checkPackageAccess(cname.substring(0, i));
-+ }
-+ }
-+ // First, check if the class has already been loaded
-+ Class c = findLoadedClass(name);
-+ if (c == null) {
-+ try {
-+ c = findClass(name);
-+ } catch (ClassNotFoundException e) {
-+ // Fall through ...
-+ }
-+ if (c == null) {
-+ c = getParent().loadClass(name);
-+ }
-+ }
-+ if (resolve) {
-+ resolveClass(c);
-+ }
-+ return c;
-+ }
-+
-+
-+ protected Class findClass(final String name)
-+ throws ClassNotFoundException
-+ {
-+ if (!name.startsWith(JS_PROXY_PKG)) {
-+ throw new ClassNotFoundException(name);
-+ }
-+ String path = name.replace('.', '/').concat(".class");
-+ URL res = getResource(path);
-+ if (res != null) {
-+ try {
-+ return defineClass(name, res);
-+ } catch (IOException e) {
-+ throw new ClassNotFoundException(name, e);
-+ }
-+ } else {
-+ throw new ClassNotFoundException(name);
-+ }
-+ }
-+
-+
-+ /*
-+ * Define the JavaScript proxy classes
-+ */
-+ private Class defineClass(String name, URL url) throws IOException {
-+ byte[] b = getBytes(url);
-+ CodeSource cs = new CodeSource(null, (java.security.cert.Certificate[])null);
-+ if (!name.equals(TRAMPOLINE)) {
-+ throw new IOException("JSClassLoader: bad name " + name);
-+ }
-+ return defineClass(name, b, 0, b.length, cs);
-+ }
-+
-+
-+ /*
-+ * Returns the contents of the specified URL as an array of bytes.
-+ */
-+ private static byte[] getBytes(URL url) throws IOException {
-+ URLConnection uc = url.openConnection();
-+ if (uc instanceof java.net.HttpURLConnection) {
-+ java.net.HttpURLConnection huc = (java.net.HttpURLConnection) uc;
-+ int code = huc.getResponseCode();
-+ if (code >= java.net.HttpURLConnection.HTTP_BAD_REQUEST) {
-+ throw new IOException("open HTTP connection failed.");
-+ }
-+ }
-+ int len = uc.getContentLength();
-+ InputStream in = new BufferedInputStream(uc.getInputStream());
-+
-+ byte[] b;
-+ try {
-+ if (len != -1) {
-+ // Read exactly len bytes from the input stream
-+ b = new byte[len];
-+ while (len > 0) {
-+ int n = in.read(b, b.length - len, len);
-+ if (n == -1) {
-+ throw new IOException("unexpected EOF");
-+ }
-+ len -= n;
-+ }
-+ } else {
-+ b = new byte[8192];
-+ int total = 0;
-+ while ((len = in.read(b, total, b.length - total)) != -1) {
-+ total += len;
-+ if (total >= b.length) {
-+ byte[] tmp = new byte[total * 2];
-+ System.arraycopy(b, 0, tmp, 0, total);
-+ b = tmp;
-+ }
-+ }
-+ // Trim array to correct size, if necessary
-+ if (total != b.length) {
-+ byte[] tmp = new byte[total];
-+ System.arraycopy(b, 0, tmp, 0, total);
-+ b = tmp;
-+ }
-+ }
-+ } finally {
-+ in.close();
-+ }
-+ return b;
-+ }
-+
-+
-+ protected PermissionCollection getPermissions(CodeSource codesource)
-+ {
-+ PermissionCollection perms = super.getPermissions(codesource);
-+ perms.add(new AllPermission());
-+ return perms;
-+ }
-+}