8213429: Windows file handling redux

Reviewed-by: alanb, dfuchs, weijun, bpb, rhalade, ahgross
This commit is contained in:
Aleksei Efimov 2019-05-20 15:57:16 +01:00
parent e287fa90a8
commit 12bf1b15ab

View File

@ -367,12 +367,22 @@ public final class FilePermission extends Permission implements Serializable {
this.mask = mask; this.mask = mask;
if (cpath.equals("<<ALL FILES>>")) { if (cpath.equals("<<ALL FILES>>")) {
allFiles = true;
directory = true; directory = true;
recursive = true; recursive = true;
cpath = ""; cpath = "";
return; return;
} }
// Validate path by platform's default file system
try {
String name = cpath.endsWith("*") ? cpath.substring(0, cpath.length() - 1) + "-" : cpath;
builtInFS.getPath(new File(name).getPath());
} catch (InvalidPathException ipe) {
invalid = true;
return;
}
// store only the canonical cpath if possible // store only the canonical cpath if possible
cpath = AccessController.doPrivileged(new PrivilegedAction<>() { cpath = AccessController.doPrivileged(new PrivilegedAction<>() {
public String run() { public String run() {
@ -576,19 +586,19 @@ public final class FilePermission extends Permission implements Serializable {
* @return the effective mask * @return the effective mask
*/ */
boolean impliesIgnoreMask(FilePermission that) { boolean impliesIgnoreMask(FilePermission that) {
if (this == that) {
return true;
}
if (allFiles) {
return true;
}
if (this.invalid || that.invalid) {
return false;
}
if (that.allFiles) {
return false;
}
if (FilePermCompat.nb) { if (FilePermCompat.nb) {
if (this == that) {
return true;
}
if (allFiles) {
return true;
}
if (this.invalid || that.invalid) {
return false;
}
if (that.allFiles) {
return false;
}
// Left at least same level of wildness as right // Left at least same level of wildness as right
if ((this.recursive && that.recursive) != that.recursive if ((this.recursive && that.recursive) != that.recursive
|| (this.directory && that.directory) != that.directory) { || (this.directory && that.directory) != that.directory) {
@ -786,10 +796,10 @@ public final class FilePermission extends Permission implements Serializable {
FilePermission that = (FilePermission) obj; FilePermission that = (FilePermission) obj;
if (this.invalid || that.invalid) {
return false;
}
if (FilePermCompat.nb) { if (FilePermCompat.nb) {
if (this.invalid || that.invalid) {
return false;
}
return (this.mask == that.mask) && return (this.mask == that.mask) &&
(this.allFiles == that.allFiles) && (this.allFiles == that.allFiles) &&
this.npath.equals(that.npath) && this.npath.equals(that.npath) &&
@ -798,6 +808,7 @@ public final class FilePermission extends Permission implements Serializable {
(this.recursive == that.recursive); (this.recursive == that.recursive);
} else { } else {
return (this.mask == that.mask) && return (this.mask == that.mask) &&
(this.allFiles == that.allFiles) &&
this.cpath.equals(that.cpath) && this.cpath.equals(that.cpath) &&
(this.directory == that.directory) && (this.directory == that.directory) &&
(this.recursive == that.recursive); (this.recursive == that.recursive);