summaryrefslogtreecommitdiffstats
path: root/libjava
diff options
context:
space:
mode:
Diffstat (limited to 'libjava')
-rw-r--r--libjava/ChangeLog10
-rw-r--r--libjava/java/lang/Class.java23
2 files changed, 26 insertions, 7 deletions
diff --git a/libjava/ChangeLog b/libjava/ChangeLog
index 21397c17707..7647cdf4f5c 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 66b85c7ce99..db2bf729f19 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();
OpenPOWER on IntegriCloud