This PR suggests that `Files.setPosixPermissions`as implemented by 
`ZipFileSystem` should preserve the leading seven bits of the 'external file 
attributes' field. These bits contain the 'file type', 'setuid', 'setgid', and 
'sticky' bits. These are unrelated to permissions and should not be modified by 
this operation.

The fix is to update `Entry.readCEN` to read all 16 bits and to update 
`ZipFileSystem.setPermissions` to preserve the leading 7 bits when updating the 
trailing 9 permission-related bits of the `Entry.posixPerms` field.

The PR adds a new test `TestPosix.preserveRemainingBits()` which verifies that 
the leading 7 bits are not affected by `Files.setPosixPermissions`.

Note that this PR does not aim to preserve the leading seven bits for the case 
when `Files.setPosixPermissions` is called with a `null` permission set. (The 
implementation currently interprets this as a signal that the 'external file 
attributes'  should not be populated and the 'version made by' OS will be MSDOS 
instead of Unix)

-------------

Commit messages:
 - Preserve non-permission 'external file attributes' bits when setting posix 
permissions

Changes: https://git.openjdk.org/jdk/pull/17170/files
 Webrev: https://webrevs.openjdk.org/?repo=jdk&pr=17170&range=00
  Issue: https://bugs.openjdk.org/browse/JDK-8322565
  Stats: 83 lines in 2 files changed: 75 ins; 4 del; 4 mod
  Patch: https://git.openjdk.org/jdk/pull/17170.diff
  Fetch: git fetch https://git.openjdk.org/jdk.git pull/17170/head:pull/17170

PR: https://git.openjdk.org/jdk/pull/17170

Reply via email to