Merge
This commit is contained in:
commit
11c8663522
@ -493,9 +493,9 @@ public abstract class PartialCompositeContext implements Context, Resolver {
|
|||||||
* Tests whether a name contains a nonempty component.
|
* Tests whether a name contains a nonempty component.
|
||||||
*/
|
*/
|
||||||
protected static boolean allEmpty(Name name) {
|
protected static boolean allEmpty(Name name) {
|
||||||
Enumeration enum_ = name.getAll();
|
Enumeration<String> enum_ = name.getAll();
|
||||||
while (enum_.hasMoreElements()) {
|
while (enum_.hasMoreElements()) {
|
||||||
if (!enum_.equals("")) {
|
if (!enum_.nextElement().isEmpty()) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -305,6 +305,35 @@ public class URLClassLoader extends SecureClassLoader implements Closeable {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Retrieve the package using the specified package name.
|
||||||
|
* If non-null, verify the package using the specified code
|
||||||
|
* source and manifest.
|
||||||
|
*/
|
||||||
|
private Package getAndVerifyPackage(String pkgname,
|
||||||
|
Manifest man, URL url) {
|
||||||
|
Package pkg = getPackage(pkgname);
|
||||||
|
if (pkg != null) {
|
||||||
|
// Package found, so check package sealing.
|
||||||
|
if (pkg.isSealed()) {
|
||||||
|
// Verify that code source URL is the same.
|
||||||
|
if (!pkg.isSealed(url)) {
|
||||||
|
throw new SecurityException(
|
||||||
|
"sealing violation: package " + pkgname + " is sealed");
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
// Make sure we are not attempting to seal the package
|
||||||
|
// at this code source URL.
|
||||||
|
if ((man != null) && isSealed(pkgname, man)) {
|
||||||
|
throw new SecurityException(
|
||||||
|
"sealing violation: can't seal package " + pkgname +
|
||||||
|
": already loaded");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return pkg;
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Defines a Class using the class bytes obtained from the specified
|
* Defines a Class using the class bytes obtained from the specified
|
||||||
* Resource. The resulting Class must be resolved before it can be
|
* Resource. The resulting Class must be resolved before it can be
|
||||||
@ -316,32 +345,23 @@ public class URLClassLoader extends SecureClassLoader implements Closeable {
|
|||||||
if (i != -1) {
|
if (i != -1) {
|
||||||
String pkgname = name.substring(0, i);
|
String pkgname = name.substring(0, i);
|
||||||
// Check if package already loaded.
|
// Check if package already loaded.
|
||||||
Package pkg = getPackage(pkgname);
|
|
||||||
Manifest man = res.getManifest();
|
Manifest man = res.getManifest();
|
||||||
if (pkg != null) {
|
if (getAndVerifyPackage(pkgname, man, url) == null) {
|
||||||
// Package found, so check package sealing.
|
try {
|
||||||
if (pkg.isSealed()) {
|
|
||||||
// Verify that code source URL is the same.
|
|
||||||
if (!pkg.isSealed(url)) {
|
|
||||||
throw new SecurityException(
|
|
||||||
"sealing violation: package " + pkgname + " is sealed");
|
|
||||||
}
|
|
||||||
|
|
||||||
} else {
|
|
||||||
// Make sure we are not attempting to seal the package
|
|
||||||
// at this code source URL.
|
|
||||||
if ((man != null) && isSealed(pkgname, man)) {
|
|
||||||
throw new SecurityException(
|
|
||||||
"sealing violation: can't seal package " + pkgname +
|
|
||||||
": already loaded");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
if (man != null) {
|
if (man != null) {
|
||||||
definePackage(pkgname, man, url);
|
definePackage(pkgname, man, url);
|
||||||
} else {
|
} else {
|
||||||
definePackage(pkgname, null, null, null, null, null, null, null);
|
definePackage(pkgname, null, null, null, null, null, null, null);
|
||||||
}
|
}
|
||||||
|
} catch (IllegalArgumentException iae) {
|
||||||
|
// parallel-capable class loaders: re-verify in case of a
|
||||||
|
// race condition
|
||||||
|
if (getAndVerifyPackage(pkgname, man, url) == null) {
|
||||||
|
// Should never happen
|
||||||
|
throw new AssertionError("Cannot find package " +
|
||||||
|
pkgname);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
// Now read the class bytes and define the class
|
// Now read the class bytes and define the class
|
||||||
|
Loading…
x
Reference in New Issue
Block a user