Index: vm/vmcore/src/kernel_classes/javasrc/java/lang/Class.java =================================================================== --- vm/vmcore/src/kernel_classes/javasrc/java/lang/Class.java (revision 451216) +++ vm/vmcore/src/kernel_classes/javasrc/java/lang/Class.java (working copy) @@ -600,9 +600,6 @@ * @com.intel.drl.spec_ref */ public URL getResource(String resource) { - if (resource == null) { - return null; - } resource = getAbsoluteResource(resource); ClassLoader classLoader = VMClassRegistry.getClassLoader(this); return classLoader == null @@ -614,9 +611,6 @@ * @com.intel.drl.spec_ref */ public InputStream getResourceAsStream(String resource) { - if (resource == null) { - return null; - } resource = getAbsoluteResource(resource); ClassLoader classLoader = VMClassRegistry.getClassLoader(this); return classLoader == null Index: vm/vmcore/src/kernel_classes/javasrc/java/lang/ClassLoader.java =================================================================== --- vm/vmcore/src/kernel_classes/javasrc/java/lang/ClassLoader.java (revision 451216) +++ vm/vmcore/src/kernel_classes/javasrc/java/lang/ClassLoader.java (working copy) @@ -239,19 +239,20 @@ * @com.intel.drl.spec_ref */ public URL getResource(String name) { + String nm = name.toString(); checkInitialized(); URL foundResource = (parentClassLoader == null) - ? BootstrapLoader.findResource(name) - : parentClassLoader.getResource(name); - return foundResource == null ? findResource(name) : foundResource; + ? BootstrapLoader.findResource(nm) + : parentClassLoader.getResource(nm); + return foundResource == null ? findResource(nm) : foundResource; } /** * @com.intel.drl.spec_ref */ public InputStream getResourceAsStream(String name) { + URL foundResource = getResource(name); try { - URL foundResource = getResource(name); return foundResource.openStream(); } catch (IOException e) { } catch (NullPointerException e) { @@ -870,8 +871,39 @@ } } - private static final class SystemClassLoader { + private static final class SystemClassLoader extends URLClassLoader { + private boolean checkingPackageAccess = false; + + private SystemClassLoader(URL[] urls, ClassLoader parent) { + super(urls, parent); + } + + @Override + protected java.security.PermissionCollection getPermissions(CodeSource codesource) { + java.security.PermissionCollection pc = super.getPermissions(codesource); + pc.add(org.apache.harmony.lang.RuntimePermissionCollection.EXIT_VM_PERMISSION); + return pc; + } + + @Override + protected synchronized Class loadClass(String className, + boolean resolveClass) throws ClassNotFoundException { + SecurityManager sm = System.getSecurityManager(); + if (sm != null && !checkingPackageAccess) { + int index = className.lastIndexOf('.'); + if (index > 0) { // skip if class is from a default package + try { + checkingPackageAccess = true; + sm.checkPackageAccess(className.substring(0, index)); + } finally { + checkingPackageAccess = false; + } + } + } + return super.loadClass(className, resolveClass); + } + private static URLClassLoader instance; static { @@ -908,17 +940,10 @@ assert false: e.toString(); } } - instance = URLClassLoader.newInstance((URL[])urlList + instance = new SystemClassLoader((URL[])urlList .toArray(new URL[urlList.size()]), null); } - /** - * This class contains static methods only. So it should not be - * instantiated. - */ - private SystemClassLoader() { - } - public static ClassLoader getInstance() { return instance; }