[Top][All Lists]
[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)
signature.asc
Description: This is a digitally signed message part
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- FYI: FilePermission constructor argument checks,
Mark Wielaard <=