commit-classpath
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

FYI: FilePermission constructor argument checks


From: Mark Wielaard
Subject: FYI: FilePermission constructor argument checks
Date: Fri, 25 Jun 2004 16:31:42 +0200

Hi,

The following adds explicit argument checking to the FilePermission
constructor.

2004-06-25  Mark Wielaard  <address@hidden>

       * 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.

The following fixes some new mauve tests that were recently added.
Committed.

Cheers,

Mark
Index: java/io/FilePermission.java
===================================================================
RCS file: /cvsroot/classpath/classpath/java/io/FilePermission.java,v
retrieving revision 1.15
diff -u -r1.15 FilePermission.java
--- java/io/FilePermission.java 23 Apr 2004 21:13:20 -0000      1.15
+++ java/io/FilePermission.java 25 Jun 2004 14:31:16 -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


reply via email to

[Prev in Thread] Current Thread [Next in Thread]