This is the mail archive of the java-patches@gcc.gnu.org mailing list for the Java project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]

Patch: FYI: Security fixes


I'm checking this in.  This fixes a Security bug I introduced with
yesterday's changes, and it also cleans up Security by removing a
redundant field.  I tested this against some code in rhug.  It is also
going in to Classpath.

Tom

Index: ChangeLog
from  Tom Tromey  <tromey@redhat.com>

	* java/security/Security.java (loadProviders): Removed unused
	`pname' variable.  Don't create `File' object.  Don't update
	`providerCount'.
	(providerCount): Removed.
	(insertProviderAt): Don't use `providerCount'.
	(addProvider(Provider,int)): Likewise.
	(removeProvider): Likewise.
	(addProvider(Provider)): Rewrote.
	(getProviders): Rewrote.
	(getProvider): Don't use `providerCount'.

Index: java/security/Security.java
===================================================================
RCS file: /cvs/gcc/gcc/libjava/java/security/Security.java,v
retrieving revision 1.5
diff -u -r1.5 Security.java
--- java/security/Security.java 2001/10/18 00:01:49 1.5
+++ java/security/Security.java 2001/10/18 17:37:01
@@ -44,7 +44,6 @@
 public final class Security extends Object
 {
   private static Vector providers = new Vector();
-  private static int providerCount = 0;
   private static Properties secprops;
 
   static
@@ -69,17 +68,14 @@
 			 separator + "security" +
 			 separator + vendor + ".security");
 
-    providerCount = 0;
     try
       {
-	File secFile = new File(secfilestr);
-	FileInputStream fin = new FileInputStream(secFile);
+	FileInputStream fin = new FileInputStream(secfilestr);
 	secprops = new Properties();
 	secprops.load(fin);
 
 	int i = 1;
 	String name;
-	StringBuffer pname = new StringBuffer("security.provider.");
 
 	while ((name = secprops.getProperty("security.provider." + i++)) !=
 	       null)
@@ -89,7 +85,6 @@
 	    try
 	      {
 		providers.addElement(Class.forName(name).newInstance());
-		providerCount++;
 		i++;
 	      }
 	    catch (ClassNotFoundException x)
@@ -162,7 +157,8 @@
     if (sm != null)
       sm.checkSecurityAccess("insertProvider." + provider.getName());
 
-    for (int i = 0; i < providerCount; i++)
+    int max = providers.size ();
+    for (int i = 0; i < max; i++)
       {
 	if (((Provider) providers.elementAt(i)).getName() ==
 	    provider.getName())
@@ -170,12 +166,11 @@
       }
 
     if (position < 0)
-        position = 0;
-    if (position > providerCount)
-      position = providerCount;
+      position = 0;
+    if (position > max)
+      position = max;
 
     providers.insertElementAt(provider, position);
-    providerCount++;
 
     return position;
   }
@@ -199,22 +194,7 @@
    */
   public static int addProvider(Provider provider)
   {
-    SecurityManager sm = System.getSecurityManager();
-
-    if (sm != null)
-      sm.checkSecurityAccess("insertProvider." + provider.getName());
-
-    for (int i = 0; i < providerCount; i++)
-      {
-	if (((Provider) providers.elementAt(i)).getName() ==
-	    provider.getName())
-	  return -1;
-      }
-
-    providers.addElement(provider);
-    providerCount++;
-
-    return providerCount - 1;
+    return insertProviderAt (provider, providers.size ());
   }
 
   /**
@@ -238,19 +218,15 @@
       sm.checkSecurityAccess("removeProvider." + name);
 
     Provider p = null;
-    for (int i = 0; i < providerCount; i++)
+    int max = providers.size ();
+    for (int i = 0; i < max; i++)
       {
 	if (((Provider) providers.elementAt(i)).getName() == name)
 	  {
-	    p = (Provider) providers.elementAt(i);
+	    providers.remove(i);
 	    break;
 	  }
       }
-
-    if (p != null)
-      if (providers.removeElement(p))
-	  providerCount--;
-
   }
 
   /**
@@ -261,9 +237,8 @@
    */
   public static Provider[] getProviders()
   {
-    Provider array[] = new Provider[providerCount];
-    for (int i = 0; i < providerCount; i++)
-      array[i] = (Provider) providers.elementAt(i);
+    Provider array[] = new Provider[providers.size ()];
+    providers.copyInto (array);
     return array;
   }
 
@@ -278,7 +253,8 @@
   public static Provider getProvider(String name)
   {
     Provider p = null;
-    for (int i = 0; i < providerCount; i++)
+    int max = providers.size ();
+    for (int i = 0; i < max; i++)
       {
 	p = (Provider) providers.elementAt(i);
 	if (p.getName() == name)


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]