+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.
+
2004-01-05 Thomas Fitzsimmons <fitzsim@redhat.com>
* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkEvents.c
public static Package getPackage(String name)
{
// Get the caller's classloader
- Class c = VMSecurityManager.getClassContext()[1];
- ClassLoader cl = c.getClassLoader();
+ ClassLoader cl = VMSecurityManager.currentClassLoader();
return cl != null ? cl.getPackage(name) : null;
}
*/
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;
}
/**
*/
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;
}
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) == ',')