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]
Other format: [Raw text]

FYI: FilePermission constructor argument checks


Hi,

The following adds explicit argument checking to the FilePermission
constructor as added to GNU Classpath recently.

2004-06-27 Mark Wielaard  <mark@klomp.org>

       * java/io/FilePermission.java (usingPerms): Removed.
       (actionsString): Made final.
       (cachePerms): Renamed to checkPerms.
       (checkPerms): Renamed from cachePerms. Call trim() and toLowerCase()
       on action String.
       (FilePermission): Check arguments, call checkPerms().
       (equals): Remove cachePerms() call.
       (implies): Likewise.

It fixes some new mauve tests that were recently added.
Committed.

Cheers,

Mark
Index: java/io/FilePermission.java
===================================================================
RCS file: /cvs/gcc/gcc/libjava/java/io/FilePermission.java,v
retrieving revision 1.11
diff -u -r1.11 FilePermission.java
--- java/io/FilePermission.java	3 May 2004 19:52:29 -0000	1.11
+++ java/io/FilePermission.java	27 Jun 2004 19:40:44 -0000
@@ -1,5 +1,5 @@
 /* java.lang.FilePermission
-   Copyright (C) 1998, 2000, 2003 Free Software Foundation, Inc.
+   Copyright (C) 1998, 2000, 2003, 2004 Free Software Foundation, Inc.
 
 This file is part of GNU Classpath.
 
@@ -46,23 +46,21 @@
 
   private static final String CURRENT_DIRECTORY = 
     System.getProperty("user.dir");
-  private boolean usingPerms = false;
   private boolean readPerm = false;
   private boolean writePerm = false;
   private boolean executePerm = false;
   private boolean deletePerm = false;
-  private String actionsString;
+  private final String actionsString;
   
-  private void cachePerms() 
+  // Checks and caches the actions
+  private void checkPerms() throws IllegalArgumentException
   {
-    // While race conditions could occur, they don't matter at all.
-    
     String action;
     int i = actionsString.indexOf(',');
     int startI = 0;
     while(i != -1) 
       {
-        action = actionsString.substring(startI,i);
+        action = actionsString.substring(startI,i).trim().toLowerCase();
         if(action.equals("read"))
           readPerm = true;
         else if(action.equals("write"))
@@ -71,12 +69,14 @@
           executePerm = true;
         else if(action.equals("delete"))
           deletePerm = true;
+	else
+	  throw new IllegalArgumentException("Unknown action: " + action);
       
         startI = i+1;
         i = actionsString.indexOf(',',startI);
       }
     
-    action = actionsString.substring(startI);
+    action = actionsString.substring(startI).trim().toLowerCase();
     if(action.equals("read"))
       readPerm = true;
     else if(action.equals("write"))
@@ -85,19 +85,30 @@
       executePerm = true;
     else if(action.equals("delete"))
       deletePerm = true;
+    else
+      throw new IllegalArgumentException("Unknown action: " + action);
   }
   
-  /** Create a new FilePermission.
-   ** @param pathExpression an expression specifying the paths this
-   **        permission represents.
-   ** @param actionsString a comma-separated list of the actions this
-   **        permission represents.
-   ** FIXME: what to do when the file string is malformed?
-   **/
+  /*
+   * Create a new FilePermission.
+   *
+   * @param pathExpression an expression specifying the paths this
+   *        permission represents.
+   * @param actionsString a comma-separated list of the actions this
+   *        permission represents. The actions must be "read", "write",
+   *        "execute" and/or "delete".
+   *
+   * FIXME: what to do when the file string is malformed?
+   */
   public FilePermission(String pathExpression, String actionsString) 
   {
     super(pathExpression);
+    if (pathExpression == null)
+      throw new NullPointerException("pathExpression");
+    if (actionsString == null)
+      throw new IllegalArgumentException("actionsString");
     this.actionsString = actionsString;
+    checkPerms();
   }
   
   /** Get the actions this FilePermission supports.
@@ -132,10 +143,6 @@
     if(!(o instanceof FilePermission))
       return false;
     FilePermission p = (FilePermission)o;
-    if(!usingPerms)
-      cachePerms();
-    if(!p.usingPerms)
-      p.cachePerms();
     
     String f1 = getName();
     String f2 = p.getName();
@@ -283,11 +290,6 @@
          break;
       }
     
-    if(!usingPerms)
-      cachePerms();
-    if(!fp.usingPerms)
-      fp.cachePerms();
-    
     if(readPerm && !fp.readPerm)
       return false;
     if(writePerm && !fp.writePerm)

Attachment: signature.asc
Description: This is a digitally signed message part


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