From e208a7feb2e323e5caf7f9659af08abc9ed09a5e Mon Sep 17 00:00:00 2001 From: Kien Dang Date: Thu, 13 Mar 2025 12:50:46 +0800 Subject: [PATCH 1/2] Add test --- .../apache/tools/ant/util/PermissionUtilsTest.java | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/src/tests/junit/org/apache/tools/ant/util/PermissionUtilsTest.java b/src/tests/junit/org/apache/tools/ant/util/PermissionUtilsTest.java index 2cfa6baeb0..af571efc36 100644 --- a/src/tests/junit/org/apache/tools/ant/util/PermissionUtilsTest.java +++ b/src/tests/junit/org/apache/tools/ant/util/PermissionUtilsTest.java @@ -25,6 +25,8 @@ import java.io.FileOutputStream; import java.io.IOException; import java.nio.file.Files; +import java.nio.file.Path; +import java.nio.file.Paths; import java.nio.file.attribute.PosixFileAttributeView; import java.nio.file.attribute.PosixFilePermission; import java.util.EnumSet; @@ -92,6 +94,16 @@ public void detectsFileTypeOfDirectoryFromResource() throws IOException { PermissionUtils.FileType.of(new FileResource(folder.newFolder("ant.tst")))); } + @Test + public void detectsFileTypeOfSymbolicLinkFromPath() throws IOException { + if (!System.getProperty("os.name").contains("Windows")) { + Path symlink = folder.getRoot().toPath().resolve("link.tst"); + Files.createSymbolicLink(symlink, folder.newFile("ant.tst").toPath()); + assertEquals(PermissionUtils.FileType.SYMLINK, + PermissionUtils.FileType.of(symlink)); + } + } + @Test public void getSetPermissionsWorksForFiles() throws IOException { File f = folder.newFile("ant.tst"); From 8e821ba8fd485876a2e36e923154a426891b7028 Mon Sep 17 00:00:00 2001 From: Kien Dang Date: Thu, 13 Mar 2025 12:51:05 +0800 Subject: [PATCH 2/2] Fix PermissionUtils.FileType.of for sym links --- src/main/org/apache/tools/ant/util/PermissionUtils.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/main/org/apache/tools/ant/util/PermissionUtils.java b/src/main/org/apache/tools/ant/util/PermissionUtils.java index 1e50217b2b..8e52a16fb2 100644 --- a/src/main/org/apache/tools/ant/util/PermissionUtils.java +++ b/src/main/org/apache/tools/ant/util/PermissionUtils.java @@ -19,6 +19,7 @@ import java.io.IOException; import java.nio.file.Files; +import java.nio.file.LinkOption; import java.nio.file.Path; import java.nio.file.attribute.BasicFileAttributes; import java.nio.file.attribute.PosixFileAttributeView; @@ -219,7 +220,7 @@ public enum FileType { */ public static FileType of(Path p) throws IOException { BasicFileAttributes attrs = - Files.readAttributes(p, BasicFileAttributes.class); + Files.readAttributes(p, BasicFileAttributes.class, LinkOption.NOFOLLOW_LINKS); if (attrs.isRegularFile()) { return FileType.REGULAR_FILE; } else if (attrs.isDirectory()) {