1
0
Fork 0

Use doPrivileged when creating class loader

This commit is contained in:
hpi1 2019-02-23 19:20:19 +02:00
parent fc1e71de7b
commit 2fb71f4e33
2 changed files with 43 additions and 10 deletions

View File

@ -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 {

View File

@ -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) {