]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
2004-01-06 Michael Koch <konqueror@gmx.de>
authorMichael Koch <konqueror@gmx.de>
Tue, 6 Jan 2004 08:34:58 +0000 (08:34 +0000)
committerMichael Koch <mkoch@gcc.gnu.org>
Tue, 6 Jan 2004 08:34:58 +0000 (08:34 +0000)
* 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

libjava/ChangeLog
libjava/java/lang/Package.java
libjava/java/lang/SecurityManager.java

index f19dd30bfcbafaf19cb479522b8a4b4a278c1a30..c97afbc4084f301357cc14330245a966e3e5b5ec 100644 (file)
@@ -1,3 +1,11 @@
+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
index f09814b6764d88da2529686d4d682865984e9c40..3045b50c2f16baa101f33752cdcc67b18745820c 100644 (file)
@@ -269,8 +269,7 @@ public class Package
   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;
   }
 
index e54ebc62f70e86e01f161725a342dee3c0b33bb4..bec39de1cd4d4a8f2cd473cbb64f51b990713dce 100644 (file)
@@ -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) == ',')