Use doPrivileged when creating class loader
This commit is contained in:
parent
fc1e71de7b
commit
2fb71f4e33
|
@ -26,28 +26,51 @@ import java.security.PermissionCollection;
|
|||
import java.util.Enumeration;
|
||||
import java.util.jar.Manifest;
|
||||
|
||||
import java.security.AccessController;
|
||||
import java.security.PrivilegedAction;
|
||||
|
||||
public abstract class DVBClassLoader extends java.security.SecureClassLoader {
|
||||
public static DVBClassLoader newInstance(URL[] urls) {
|
||||
return new DVBClassLoaderImpl(urls);
|
||||
public static DVBClassLoader newInstance(final URL[] urls) {
|
||||
return (DVBClassLoader)AccessController.doPrivileged(
|
||||
new PrivilegedAction() {
|
||||
public Object run() {
|
||||
return new DVBClassLoaderImpl(urls);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
public static DVBClassLoader newInstance(URL[] urls, ClassLoader parent) {
|
||||
return new DVBClassLoaderImpl(urls, parent);
|
||||
public static DVBClassLoader newInstance(final URL[] urls, final ClassLoader parent) {
|
||||
return (DVBClassLoader)AccessController.doPrivileged(
|
||||
new PrivilegedAction() {
|
||||
public Object run() {
|
||||
return new DVBClassLoaderImpl(urls, parent);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
public DVBClassLoader(URL[] urls) {
|
||||
public DVBClassLoader(final URL[] urls) {
|
||||
SecurityManager sm = System.getSecurityManager();
|
||||
if (sm != null)
|
||||
sm.checkCreateClassLoader();
|
||||
loader = new DVBURLClassLoader(urls);
|
||||
loader = (DVBURLClassLoader)AccessController.doPrivileged(
|
||||
new PrivilegedAction() {
|
||||
public Object run() {
|
||||
return new DVBURLClassLoader(urls);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
public DVBClassLoader(URL[] urls, ClassLoader parent) {
|
||||
public DVBClassLoader(final URL[] urls, final ClassLoader parent) {
|
||||
super(parent);
|
||||
SecurityManager sm = System.getSecurityManager();
|
||||
if (sm != null)
|
||||
sm.checkCreateClassLoader();
|
||||
loader = new DVBURLClassLoader(urls, parent);
|
||||
loader = (DVBURLClassLoader)AccessController.doPrivileged(
|
||||
new PrivilegedAction() {
|
||||
public Object run() {
|
||||
return new DVBURLClassLoader(urls, parent);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
public Class findClass(String name) throws ClassNotFoundException {
|
||||
|
|
|
@ -31,12 +31,15 @@ import java.util.ArrayList;
|
|||
import java.util.Enumeration;
|
||||
import java.util.Map;
|
||||
|
||||
import java.security.AccessController;
|
||||
import java.security.PrivilegedAction;
|
||||
|
||||
import javax.tv.xlet.Xlet;
|
||||
|
||||
import org.videolan.bdjo.AppCache;
|
||||
|
||||
public class BDJClassLoader extends URLClassLoader {
|
||||
public static BDJClassLoader newInstance(AppCache[] appCaches, String basePath, String classPathExt, String xletClass) {
|
||||
public static BDJClassLoader newInstance(AppCache[] appCaches, String basePath, String classPathExt, final String xletClass) {
|
||||
ArrayList classPath = new ArrayList();
|
||||
URL url = translateClassPath(appCaches, basePath, null);
|
||||
if (url != null)
|
||||
|
@ -47,7 +50,14 @@ public class BDJClassLoader extends URLClassLoader {
|
|||
if ((url != null) && (classPath.indexOf(url) < 0))
|
||||
classPath.add(url);
|
||||
}
|
||||
return new BDJClassLoader((URL[])classPath.toArray(new URL[classPath.size()]) , xletClass);
|
||||
|
||||
final URL[] urls = (URL[])classPath.toArray(new URL[classPath.size()]);
|
||||
return (BDJClassLoader)AccessController.doPrivileged(
|
||||
new PrivilegedAction() {
|
||||
public Object run() {
|
||||
return new BDJClassLoader(urls, xletClass);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
private static URL translateClassPath(AppCache[] appCaches, String basePath, String classPath) {
|
||||
|
|
Loading…
Reference in New Issue