8001043: Clarify definition restrictions
Reviewed-by: alanb, skoivu, smarks
This commit is contained in:
parent
09f414379d
commit
77302c24fb
@ -55,6 +55,7 @@ import java.util.IdentityHashMap;
|
||||
import java.util.Map;
|
||||
import java.util.StringTokenizer;
|
||||
import java.util.WeakHashMap;
|
||||
import sun.reflect.misc.ReflectUtil;
|
||||
import sun.rmi.runtime.Log;
|
||||
import sun.security.action.GetPropertyAction;
|
||||
|
||||
@ -170,7 +171,7 @@ public final class LoaderHandler {
|
||||
|
||||
if (defaultLoader != null) {
|
||||
try {
|
||||
Class<?> c = Class.forName(name, false, defaultLoader);
|
||||
Class<?> c = loadClassForName(name, false, defaultLoader);
|
||||
if (loaderLog.isLoggable(Log.VERBOSE)) {
|
||||
loaderLog.log(Log.VERBOSE,
|
||||
"class \"" + name + "\" found via defaultLoader, " +
|
||||
@ -422,7 +423,7 @@ public final class LoaderHandler {
|
||||
* resolved without the security-offending codebase anyway;
|
||||
* if so, return successfully (see bugids 4191926 & 4349670).
|
||||
*/
|
||||
Class<?> c = Class.forName(name, false, parent);
|
||||
Class<?> c = loadClassForName(name, false, parent);
|
||||
if (loaderLog.isLoggable(Log.VERBOSE)) {
|
||||
loaderLog.log(Log.VERBOSE,
|
||||
"class \"" + name + "\" found via " +
|
||||
@ -448,7 +449,7 @@ public final class LoaderHandler {
|
||||
}
|
||||
|
||||
try {
|
||||
Class<?> c = Class.forName(name, false, loader);
|
||||
Class<?> c = loadClassForName(name, false, loader);
|
||||
if (loaderLog.isLoggable(Log.VERBOSE)) {
|
||||
loaderLog.log(Log.VERBOSE,
|
||||
"class \"" + name + "\" " + "found via codebase, " +
|
||||
@ -726,7 +727,7 @@ public final class LoaderHandler {
|
||||
|
||||
for (int i = 0; i < interfaces.length; i++) {
|
||||
Class<?> cl =
|
||||
(classObjs[i] = Class.forName(interfaces[i], false, loader));
|
||||
(classObjs[i] = loadClassForName(interfaces[i], false, loader));
|
||||
|
||||
if (!Modifier.isPublic(cl.getModifiers())) {
|
||||
ClassLoader current = cl.getClassLoader();
|
||||
@ -1195,5 +1196,28 @@ public final class LoaderHandler {
|
||||
public String toString() {
|
||||
return super.toString() + "[\"" + annotation + "\"]";
|
||||
}
|
||||
|
||||
@Override
|
||||
protected Class<?> loadClass(String name, boolean resolve)
|
||||
throws ClassNotFoundException {
|
||||
if (parent == null) {
|
||||
ReflectUtil.checkPackageAccess(name);
|
||||
}
|
||||
return super.loadClass(name, resolve);
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
private static Class<?> loadClassForName(String name,
|
||||
boolean initialize,
|
||||
ClassLoader loader)
|
||||
throws ClassNotFoundException
|
||||
{
|
||||
if (loader == null) {
|
||||
ReflectUtil.checkPackageAccess(name);
|
||||
}
|
||||
return Class.forName(name, initialize, loader);
|
||||
}
|
||||
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user