diff options
author | Michael Koch <konqueror@gmx.de> | 2004-01-06 08:34:58 +0000 |
---|---|---|
committer | Michael Koch <mkoch@gcc.gnu.org> | 2004-01-06 08:34:58 +0000 |
commit | 907cdc7fad039a88c619a92107186ef03b9a816f (patch) | |
tree | f3b23a77c72b7ec64fcadda0eeb7832c2f9626b5 /libjava/java/lang/SecurityManager.java | |
parent | 24746a428d28ff8398075c9be46cef326db45740 (diff) | |
download | gcc-907cdc7fad039a88c619a92107186ef03b9a816f.zip gcc-907cdc7fad039a88c619a92107186ef03b9a816f.tar.gz gcc-907cdc7fad039a88c619a92107186ef03b9a816f.tar.bz2 |
2004-01-06 Michael Koch <konqueror@gmx.de>
* java/lang/Package.java
(getPackage): Get the current class loader directly.
* java/lang/SecurityManager.java
(currentLoadedClass): Dont iterate over class contexts.
(classLoaderDepth): Don't check class loaders if everything is allowed.
From-SVN: r75465
Diffstat (limited to 'libjava/java/lang/SecurityManager.java')
-rw-r--r-- | libjava/java/lang/SecurityManager.java | 24 |
1 files changed, 15 insertions, 9 deletions
diff --git a/libjava/java/lang/SecurityManager.java b/libjava/java/lang/SecurityManager.java index e54ebc6..bec39de 100644 --- a/libjava/java/lang/SecurityManager.java +++ b/libjava/java/lang/SecurityManager.java @@ -207,11 +207,8 @@ public class SecurityManager */ protected Class currentLoadedClass() { - Class[] c = getClassContext(); - for (int i = 0; i < c.length; i++) - if (c[i].getClassLoader() != null) - return c[i]; - return null; + int i = classLoaderDepth(); + return i >= 0 ? getClassContext()[i] : null; } /** @@ -247,10 +244,18 @@ public class SecurityManager */ protected int classLoaderDepth() { - Class[] c = getClassContext(); - for (int i = 0; i < c.length; i++) - if (c[i].getClassLoader() != null) - return i; + try + { + checkPermission(new AllPermission()); + } + catch (SecurityException e) + { + Class[] c = getClassContext(); + for (int i = 0; i < c.length; i++) + if (c[i].getClassLoader() != null) + // XXX Check if c[i] is AccessController, or a system class. + return i; + } return -1; } @@ -1016,6 +1021,7 @@ public class SecurityManager for (int index = list.indexOf(packageName); index != -1; index = list.indexOf(packageName, index + 1)) { + // Exploit package visibility for speed. int packageNameCount = packageName.length(); if (index + packageNameCount == list.length() || list.charAt(index + packageNameCount) == ',') |