8287097: (fs) Files::copy requires an undocumented permission when copying from the default file system to a non-default file system

Reviewed-by: chegar, alanb
This commit is contained in:
Brian Burkhalter 2022-06-02 17:36:25 +00:00
parent 49e24f0cd8
commit 13596cdf69
3 changed files with 82 additions and 8 deletions

View file

@ -110,13 +110,21 @@ class CopyMoveHelper {
Files.getFileAttributeView(source, PosixFileAttributeView.class);
// attributes of source file
BasicFileAttributes sourceAttrs = sourcePosixView != null ?
Files.readAttributes(source,
PosixFileAttributes.class,
linkOptions) :
Files.readAttributes(source,
BasicFileAttributes.class,
linkOptions);
BasicFileAttributes sourceAttrs = null;
if (sourcePosixView != null) {
try {
sourceAttrs = Files.readAttributes(source,
PosixFileAttributes.class,
linkOptions);
} catch (SecurityException ignored) {
// okay to continue if RuntimePermission("accessUserInformation") not granted
}
}
if (sourceAttrs == null)
sourceAttrs = Files.readAttributes(source,
BasicFileAttributes.class,
linkOptions);
assert sourceAttrs != null;
if (sourceAttrs.isSymbolicLink())
throw new IOException("Copying of symbolic links not supported");
@ -157,7 +165,11 @@ class CopyMoveHelper {
if (sourceAttrs instanceof PosixFileAttributes sourcePosixAttrs &&
targetView instanceof PosixFileAttributeView targetPosixView) {
targetPosixView.setPermissions(sourcePosixAttrs.permissions());
try {
targetPosixView.setPermissions(sourcePosixAttrs.permissions());
} catch (SecurityException ignored) {
// okay to continue if RuntimePermission("accessUserInformation") not granted
}
}
} catch (Throwable x) {
// rollback