diff options
author | Bryce McKinlay <mckinlay@redhat.com> | 2006-05-17 15:09:57 +0000 |
---|---|---|
committer | Bryce McKinlay <bryce@gcc.gnu.org> | 2006-05-17 16:09:57 +0100 |
commit | 5600ef7fb11fc4bcbb626dc52a7c6dbd95c40271 (patch) | |
tree | 4b1478e927e77a2c832d8513962880bd615b27b5 | |
parent | c93c502529fb81ef96ecf90dcc19568227c5b4cb (diff) | |
download | gcc-5600ef7fb11fc4bcbb626dc52a7c6dbd95c40271.zip gcc-5600ef7fb11fc4bcbb626dc52a7c6dbd95c40271.tar.gz gcc-5600ef7fb11fc4bcbb626dc52a7c6dbd95c40271.tar.bz2 |
re PR libgcj/27352 (SecurityManager.checkPermission() called unnecessarily)
PR libgcj/27352
* java/lang/Class.java (getClassLoaderInternal): New method.
(forName (String, Class)): Use getClassLoaderInternal.
(getPackage): Likewise.
(getResource): Likewise.
(getResourceAsStream): Likewise.
(desiredAssertionStatus): Likewise.
From-SVN: r113863
-rw-r--r-- | libjava/ChangeLog | 10 | ||||
-rw-r--r-- | libjava/java/lang/Class.java | 23 |
2 files changed, 26 insertions, 7 deletions
diff --git a/libjava/ChangeLog b/libjava/ChangeLog index 21397c1..7647cdf 100644 --- a/libjava/ChangeLog +++ b/libjava/ChangeLog @@ -1,3 +1,13 @@ +2006-05-15 Bryce McKinlay <mckinlay@redhat.com> + + PR libgcj/27352 + * java/lang/Class.java (getClassLoaderInternal): New method. + (forName (String, Class)): Use getClassLoaderInternal. + (getPackage): Likewise. + (getResource): Likewise. + (getResourceAsStream): Likewise. + (desiredAssertionStatus): Likewise. + 2006-05-15 Andreas Tobler <a.tobler@schweiz.ch> * stacktrace.cc (StackTrace::FillInFrameInfo): Use diff --git a/libjava/java/lang/Class.java b/libjava/java/lang/Class.java index 66b85c7..db2bf72 100644 --- a/libjava/java/lang/Class.java +++ b/libjava/java/lang/Class.java @@ -115,7 +115,7 @@ public final class Class implements Serializable private static Class forName (String className, Class caller) throws ClassNotFoundException { - return forName(className, true, caller.getClassLoader()); + return forName(className, true, caller.getClassLoaderInternal()); } @@ -192,10 +192,19 @@ public final class Class implements Serializable * @see RuntimePermission */ public native ClassLoader getClassLoader (); - + // A private internal method that is called by compiler-generated code. private final native ClassLoader getClassLoader (Class caller); - + + /** + * Internal method that circumvents the usual security checks when + * getting the class loader. + */ + private ClassLoader getClassLoaderInternal () + { + return loader; + } + /** * If this is an array, get the Class representing the type of array. * Examples: "[[Ljava.lang.String;" would return "[Ljava.lang.String;", and @@ -473,7 +482,7 @@ public final class Class implements Serializable */ public Package getPackage() { - ClassLoader cl = getClassLoader(); + ClassLoader cl = getClassLoaderInternal(); if (cl != null) return cl.getPackage(getPackagePortion(getName())); else @@ -616,7 +625,7 @@ public final class Class implements Serializable public URL getResource(String resourceName) { String name = resourcePath(resourceName); - ClassLoader loader = getClassLoader(); + ClassLoader loader = getClassLoaderInternal(); if (loader == null) return ClassLoader.getSystemResource(name); return loader.getResource(name); @@ -644,7 +653,7 @@ public final class Class implements Serializable public InputStream getResourceAsStream(String resourceName) { String name = resourcePath(resourceName); - ClassLoader loader = getClassLoader(); + ClassLoader loader = getClassLoaderInternal(); if (loader == null) return ClassLoader.getSystemResourceAsStream(name); return loader.getResourceAsStream(name); @@ -839,7 +848,7 @@ public final class Class implements Serializable */ public boolean desiredAssertionStatus() { - ClassLoader c = getClassLoader(); + ClassLoader c = getClassLoaderInternal(); Object status; if (c == null) return VMClassLoader.defaultAssertionStatus(); |