From 7c6a43010bc41b5c5391e42332f7ccf4c024cc31 Mon Sep 17 00:00:00 2001 From: Colin Decker Date: Thu, 22 May 2025 13:17:39 -0700 Subject: [PATCH] Fix implementation of `PosixFileAttributes.permissions()` to return a modifiable set as specified in the Javadoc for that method. Fixes https://github.com/google/jimfs/issues/413 RELNOTES=Fixed implementation of `PosixFileAttributes.permissions()` to return a modifiable set as specified in the Javadoc for that method. PiperOrigin-RevId: 762097962 --- .../com/google/common/jimfs/PosixAttributeProvider.java | 6 +++--- .../google/common/jimfs/PosixAttributeProviderTest.java | 7 +++++++ 2 files changed, 10 insertions(+), 3 deletions(-) diff --git a/jimfs/src/main/java/com/google/common/jimfs/PosixAttributeProvider.java b/jimfs/src/main/java/com/google/common/jimfs/PosixAttributeProvider.java index 4f0928368..035288494 100644 --- a/jimfs/src/main/java/com/google/common/jimfs/PosixAttributeProvider.java +++ b/jimfs/src/main/java/com/google/common/jimfs/PosixAttributeProvider.java @@ -33,6 +33,7 @@ import java.nio.file.attribute.PosixFilePermission; import java.nio.file.attribute.PosixFilePermissions; import java.nio.file.attribute.UserPrincipal; +import java.util.LinkedHashSet; import java.util.Map; import java.util.Set; import org.jspecify.annotations.Nullable; @@ -68,7 +69,6 @@ public ImmutableSet fixedAttributes() { return ATTRIBUTES; } - @SuppressWarnings("unchecked") @Override public ImmutableMap defaultValues(Map userProvidedDefaults) { Object userProvidedGroup = userProvidedDefaults.get("posix:group"); @@ -262,8 +262,8 @@ public GroupPrincipal group() { } @Override - public ImmutableSet permissions() { - return permissions; + public Set permissions() { + return new LinkedHashSet<>(permissions); } } } diff --git a/jimfs/src/test/java/com/google/common/jimfs/PosixAttributeProviderTest.java b/jimfs/src/test/java/com/google/common/jimfs/PosixAttributeProviderTest.java index baef1f917..ca78727e0 100644 --- a/jimfs/src/test/java/com/google/common/jimfs/PosixAttributeProviderTest.java +++ b/jimfs/src/test/java/com/google/common/jimfs/PosixAttributeProviderTest.java @@ -121,4 +121,11 @@ public void testAttributes() { assertThat(attrs.group()).isEqualTo(createGroupPrincipal("group")); assertThat(attrs.fileKey()).isEqualTo(0); } + + @Test + public void testAttributes_permissionsAreModifiable() { + Set permissions = provider.readAttributes(file).permissions(); + permissions.add(PosixFilePermission.OWNER_EXECUTE); + assertThat(permissions).isEqualTo(PosixFilePermissions.fromString("rwxr--r--")); + } }